Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么这个jquery函数在循环它自己?_Javascript_Jquery - Fatal编程技术网

Javascript 为什么这个jquery函数在循环它自己?

Javascript 为什么这个jquery函数在循环它自己?,javascript,jquery,Javascript,Jquery,我在表格中显示了一些文本,并添加了一个“阅读更多”按钮来打开文本。但当我点击这个按钮时,我想同时在“div#selectedItem”中显示整个文本。如果单击“阅读更多”按钮查看其他文本,我想用当前文本替换该文本。这里的问题是,当我调试代码时,我发现当断点到达函数的末尾时,它会再次从函数开始。为什么会这样 $(".table tbody").on("click", ".read-more", function readMore(e) { var c

我在表格中显示了一些文本,并添加了一个“阅读更多”按钮来打开文本。但当我点击这个按钮时,我想同时在“div#selectedItem”中显示整个文本。如果单击“阅读更多”按钮查看其他文本,我想用当前文本替换该文本。这里的问题是,当我调试代码时,我发现当断点到达函数的末尾时,它会再次从函数开始。为什么会这样

$(".table tbody").on("click",
    ".read-more",
    function readMore(e) {        
        var currentRow = $(this).closest("tr");
        var cellText = currentRow.find("td:eq(1)").text();
        $(this).siblings(".more-text").contents().unwrap();
        $(this).remove();
        e.preventDefault();
        if (clickedTimes > 0)
            $("div#selectedItem").html("");
        $("div#selectedItem").prepend(cellText).html();
        clickedTimes++;
        setTimeout(readMore, 1000);
});

我希望我的函数在每次单击时都能独立工作。

因为在每次调用结束时,都有一个
setTimeout
重新调用该函数。删除此选项,您的代码将不再递归循环:

$(".table tbody").on("click", ".read-more", function readMore(e) {        
    var currentRow = $(this).closest("tr");
    var cellText = currentRow.find("td:eq(1)").text();
    $(this).siblings(".more-text").contents().unwrap();
    $(this).remove();
    e.preventDefault();
    if (clickedTimes > 0)
        $("div#selectedItem").html("");
    $("div#selectedItem").prepend(cellText).html();
    clickedTimes++;
});

因为在每次调用结束时,都会有一个
setTimeout
,它会重新调用函数。删除此选项,您的代码将不再递归循环:

$(".table tbody").on("click", ".read-more", function readMore(e) {        
    var currentRow = $(this).closest("tr");
    var cellText = currentRow.find("td:eq(1)").text();
    $(this).siblings(".more-text").contents().unwrap();
    $(this).remove();
    e.preventDefault();
    if (clickedTimes > 0)
        $("div#selectedItem").html("");
    $("div#selectedItem").prepend(cellText).html();
    clickedTimes++;
});

单击时间在哪里?此函数是一个内部函数。ClickedTimes在上面声明。ClickedTimes在哪里?此函数是一个内部函数。点击时间如上所述。杰克,是的,但现在还有另一个问题。当函数结束时,它会将我重定向到jquery-3.3.1文件,当我单击f10继续时,它会将我带回函数并再次执行它。在第一次执行中,我的cellText显示在#selectedItem中,但它递归循环14次。(我的计数器变为14)当我停止调试器并单击其他“阅读更多”按钮时,它并不是什么都没有!我解决了!我应该添加每个(函数)!非常感谢。杰克先生,是的,但现在还有另一个问题。当函数结束时,它会将我重定向到jquery-3.3.1文件,当我单击f10继续时,它会将我带回函数并再次执行它。在第一次执行中,我的cellText显示在#selectedItem中,但它递归循环14次。(我的计数器变为14)当我停止调试器并单击其他“阅读更多”按钮时,它并不是什么都没有!我解决了!我应该添加每个(函数)!非常感谢。