【问题标题】:How to make onclick work on first click?如何使 onclick 在第一次点击时起作用?
【发布时间】:2016-12-14 13:04:33
【问题描述】:

我将 onclick 用于 myFunction(),它在按下“回复”按钮时执行。

该函数用于为其子项 (cmets) 设置 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>");

我的功能

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);
    }

存储 cmets

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 "";
                }
            }
        //}
}

【问题讨论】:

    标签: javascript html parent-child


    【解决方案1】:

    return false 添加到event handler 而不是函数:

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

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

    另外,为了让它抓住,你可以尝试使用:

    onclick='return myFunction(%d);'
    

    并在函数内部添加return false

    【讨论】:

    • 两个都试过了,但没有区别:/
    • 我想在 myFunction 中移动“addCommentField”函数,但我似乎无法让它工作..
    • 你需要展示整个代码,以便我分析它并让你知道发生了什么。
    • 我已经添加了影响回复功能的所有内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多