Javascript 为什么这个jquery脚本在更新表时会创建多个警报

Javascript 为什么这个jquery脚本在更新表时会创建多个警报,javascript,jquery,html,Javascript,Jquery,Html,我有一个小脚本(我是一个业余爱好者),它允许通过点击并更新弹出窗口来更新文本。它可以工作,但当我测试它时,我注意到每次单击一个,它似乎都包含上次的信息,这意味着每次单击一个td,脚本运行所需的时间更长(第一次单击时触发一次警报,第二次单击时触发两次警报,依此类推)。我假设它与美元(这个)有关。是的,我知道有一个表更新插件,但是对于我的用户可能进行的三到四次编辑来说,这太过分了。以下是代码和JSFIDLE: 我不得不添加org=“”,以使其工作——不知道为什么。脚本运行后是否应该销毁所有var 以

我有一个小脚本(我是一个业余爱好者),它允许通过点击并更新弹出窗口来更新文本。它可以工作,但当我测试它时,我注意到每次单击一个,它似乎都包含上次的信息,这意味着每次单击一个td,脚本运行所需的时间更长(第一次单击时触发一次警报,第二次单击时触发两次警报,依此类推)。我假设它与美元(这个)有关。是的,我知道有一个表更新插件,但是对于我的用户可能进行的三到四次编辑来说,这太过分了。以下是代码和JSFIDLE:

我不得不添加org=“”,以使其工作——不知道为什么。脚本运行后是否应该销毁所有var

以下是html:

<table border="1">
    <tr>
        <td>click</td>
        <td>this</td>
    </tr>
    <tr>
        <td>thought</td>
    </tr>
</table>
<div id="pop" data-role="popup">
    <input id='txt'></input> <a href='#' data-role='button' data-rel="back" id='close' </div>

点击
这
思想

#close
的绑定移动到
td
处理程序之外,否则当您单击
td
时,它会一直重新绑定,因此会有多个单元格更新!我还创建了
org
一个全局变量,每当单击
td
时,该变量将被赋予
this
的正确值。最终代码:


是的,存在内存泄漏,因为所有这些都被添加到函数中,因为闭包是如何工作的

$('#pop').popup('open');
var cell = $(this).text();
var org = $(this);
$('#txt').val(cell);
如果将其移动到匿名函数,则不会将其添加到该函数中

// clicking on a TD cell to update it
$('td').on('click', function () {

    (function selfinvokingfunction() {
      $('#pop').popup('open');
      var cell = $(this).text();
      var org = $(this);
      $('#txt').val(cell);
    })();


    $('#close').on('click', function () {

        var TXT = $('#txt').val()
        alert(TXT)
        $(org).text(TXT)
        org = ""
    });

});

啊,我现在明白了。我只是在学习,这个问题澄清了很多结构!接下来的一个问题——如果可以的话:当我在动态创建了表的页面上使用这个脚本时,这个脚本在这些页面上不起作用。它对标记中的表td起作用。你能给我指个正确的方向吗?@Cory--当然!原因是您的事件处理程序是在运行时注册的,因此,由于这些动态项不存在,绑定无法工作!使用
.on
(查看API以了解所有详细信息)--类似于
$(文档)。在(“单击”,“td”,function(){
应该可以做到。确实做到了!非常感谢。而且,您对该问题的描述完全有意义。
$('#pop').popup('open');
var cell = $(this).text();
var org = $(this);
$('#txt').val(cell);
// clicking on a TD cell to update it
$('td').on('click', function () {

    (function selfinvokingfunction() {
      $('#pop').popup('open');
      var cell = $(this).text();
      var org = $(this);
      $('#txt').val(cell);
    })();


    $('#close').on('click', function () {

        var TXT = $('#txt').val()
        alert(TXT)
        $(org).text(TXT)
        org = ""
    });

});