2016-12-14 120 views
0

我正在使用onclick for myFunction(),它在按下“回复”按钮时执行。如何使第一次点击onclick工作?

该函数用于为其子代(注释)设置parentId值。我的问题是,直到用户第二次单击该按钮时才设置该值。

如果我按下回复按钮,一旦parentId将为0,并且如果在添加评论之前点击它两次,它将被给予其父母ID。

获得评论,包括与父ID

$query2 = "SELECT * FROM data WHERE `parent_id` IS NULL ORDER BY `id` DESC"; 
      $result = mysqli_query($connect, $query2); 

      while($row = mysqli_fetch_array($result)){ 
       $id = $row['id']; 
       $name = $row['name']; 
       $comment = $row['comment']; 
       $date = $row['date']; 
       $parent_id = $row['parent_id']; 

           printf("<div>"); 
            printf("<div>"); 
             printf("<div>"); 
              printf("<strong> $name </strong><span style='float:right'class='text-muted'>$date + $id</span>"); 
             printf("</div>"); 
    printf("<div>%s",$comment); 
              printf("<div class='cmt'>"); 
               printf("<button class='replybtn' onclick='return myFunction(%d);' style='float:right'>Reply</button>",$id); 
               printf("<div class='cmttext'></div>"); 
               printf("<div class='replyform'></div>"); 
              printf("</div>"); 
             printf("</div>"); 
            printf("</div>"); 
           printf("</div>"); 

MyFunction的

var myFunction = function(parentId){ 
     document.getElementById('plopp').value = parentId; 
    }; 

回复形式

var varHtml = "\ 
    </br><form method='post' name='form_child'>\n\ 
    Namn: <br>\n\ 
    <input type='text' name ='name_child'><br>\n\ 
    Kommentar: <br>\n\ 
    <textarea name='comment_child'></textarea> \n\ 
    <input type='hidden' name='parent_child' id='plopp'><br>\n\ 
    <input type='submit' name='submit_reply' value='Skicka'/> \n\ 
    <button id='hide' type='submit' name='close'>Stäng</input>\n\ 
    </form>"; 

    var allElements = document.body.getElementsByClassName("replybtn"); 

    var addCommentField = function() { 
     for (var i = 0; allElements.length > i; i++) { 
     if (allElements[i] === this) { 
      console.log("this "+ i); 

      if (document.getElementsByClassName("replyform")[i].innerHTML.length === 0) { 
      document.getElementsByClassName("replyform")[i].innerHTML = varHtml; 
      } 

     } 
     } 
    }; 


    for (var i = 0; i < allElements.length; i++) { 
     allElements[i].addEventListener('click', addCommentField, false); 
    } 
隐藏的输入字段

商店评论

if(isset($_POST['submit_reply'])){ 
      if(isset($_POST['name_child']) && isset($_POST['comment_child'])){ 
       if(!empty($_POST['name_child']) && !empty($_POST['comment_child'])){ 
        $name = htmlentities($_POST['name_child']); 
        $comment = htmlentities($_POST['comment_child']); 
        $parent_id = $_POST['parent_child']; 
        $date = date("Y-m-d"); 
        $connect = mysqli_connect(...); 

        if($connect){ 
         mysqli_select_db($connect, "comments"); 
         $query_child = "INSERT INTO data (...) VALUES (...)"; 

         if(mysqli_query($connect, $query_child)){ 

         } else { 
          die ("Failed: " . mysqli_error($connect)); 
         } 
        } else { 
         die("Failed to connect to mysql: " . mysqli_errno($connect)); 
        } 
       }else{ 
        echo ""; 
       } 
      } 
     //} 
} 

回答

1

添加return falseevent handler,而不是功能:

onclick='myFunction(%d); return false;' 

这里的onclick是事件处理程序。即使您将return false放入您的myFunction中,也会失败,因为返回的false永远不会被事件处理程序捕获。

此外,让它赶上,你可以尝试使用:

onclick='return myFunction(%d);' 

并添加return false里面的功能。

+0

尝试了两个,但它没有区别:/ – ulr

+0

@ulr控制台中的任何错误? –

+0

控制台中没有错误 – ulr