jquery.click not working=jquery.on(click…)工作正常

jquery.click not working=jquery.on(click…)工作正常,jquery,onclick,click,Jquery,Onclick,Click,几周前,我正在进行我的项目,并编写了一些代码,以使表格行可点击(在那里,完成了)。 这段代码以前使用过,没有问题。我浪费了一天的时间试图让代码正常工作(尽管我以前做过多次)-我试图让它正常工作的一些事情是A-在所有事情上都将id更改为class,b-将代码从脚本部分的底部移动到顶部,c-重命名变量,d-在变量前面添加'var',从变量前面减去var,e-将所有单引号更改为双引号,将所有双引号更改为单引号,f-更改表名,g-尝试单击表而不是行,h-将表格放入div,从div中取出表格,等等 什么都

几周前,我正在进行我的项目,并编写了一些代码,以使表格行可点击(在那里,完成了)。 这段代码以前使用过,没有问题。我浪费了一天的时间试图让代码正常工作(尽管我以前做过多次)-我试图让它正常工作的一些事情是A-在所有事情上都将id更改为class,b-将代码从脚本部分的底部移动到顶部,c-重命名变量,d-在变量前面添加'var',从变量前面减去var,e-将所有单引号更改为双引号,将所有双引号更改为单引号,f-更改表名,g-尝试单击表而不是行,h-将表格放入div,从div中取出表格,等等

什么都没有成功,所以作为最后的手段,在深夜,我把.click切换到.on(点击-惊喜-一切都很好)

昨天也发生了同样的事情,但我没有做a-h,而是直接更改了。单击以打开(单击)

以下是两段代码片段:

上一个永远不起作用,下一个总是起作用(我时不时地对它们进行评论)

下面是另一个页面中的代码片段,它工作正常:

$("#patienttable tr").click(function() {
       var passthis = $(this).find("#localid").html();
       $.post("php/setsessionvariable.php",
              {sessionval: passthis},
              function(e) {window.location.href = "root.php"}
              );
});
我已经阅读了jQuery文档,它说.click函数在某种程度上与.on(click)直接相关,因此对我来说,如果一个可以工作,那么另一个应该可以工作

作为一名noob,我想成为一名更好的程序员,即使我的代码与.on(click)一起工作,我想知道为什么我的.click不起作用(一个智力练习)

因此,我的问题是:

  • 是.click和.on(单击是否真的相关

  • 在点击片段中是否有明显的遗漏,使其无法正常工作

  • 关于这个问题,有没有不同的解决方法


  • 再次感谢大家。

    单击会将单击事件绑定到
    DOM
    中当时存在的元素,而将委托事件并绑定稍后动态添加的单击(事件)

    委托事件 委派事件的优点是,它们可以从中处理事件 以后添加到文档中的子元素。通过 选择一个元素,该元素保证在 已附加委派事件处理程序,您可以使用委派事件 避免频繁附加和删除事件处理程序


    .click
    会将click事件绑定到
    DOM
    中当时存在的元素,而将委派事件并绑定稍后动态添加的click(事件)

    委托事件 委派事件的优点是,它们可以从中处理事件 以后添加到文档中的子元素。通过 选择一个元素,该元素保证在 已附加委派事件处理程序,您可以使用委派事件 避免频繁附加和删除事件处理程序


    阅读有关直接事件和委托事件的部分。@j08691我会说“是”,因为第一个事件不起作用。
    $('foo')。单击(…)
    相当于
    $('foo')。在('click,…)
    。但是您使用了不同的选择器/元素将处理程序绑定到(
    \mdtable tr
    在第一种情况下,在第二种情况下,
    文档
    ),因此它们在您的案例中并不等同。您正在使用jQuery学习中心中解释得很好的事件委派:。@broading-我很确定我知道答案,我只想从OP那里得到确认。@Kathiravan这显然是错误的。区别不在于
    click()
    on()
    ,这是事件是否被委派。
    on()
    允许您创建直接和委派的事件,其中
    click()
    只允许前者。请阅读有关直接和委派事件的部分。@j08691我会说是,因为第一个事件不起作用。
    $('foo')。单击(…)
    相当于
    $('foo')。on('click,…)
    。但是您正在使用不同的选择器/元素将处理程序绑定到(
    #在第一种情况下是mdtable tr
    ,在第二种情况下是
    document
    ),因此它们在您的案例中并不等同。您正在使用jQuery学习中心中解释得很好的事件委派:。@broading-我很确定我知道答案,我只想从OP那里得到确认。@Kathiravan这显然是错误的。区别不在于
    click()
    on()
    ,这是事件是否委派。
    on()
    允许您创建直接和委派事件,其中
    单击()
    只允许前者。更具体地说,在提供的代码中,上的
    将事件绑定到
    文档
    。事件不会在以后添加。是的……这是我的问题……如上所述,加载DOM后通过单击和ajax调用加载不起作用的内容。非常感谢!更具体地说,在代码支持中plied,
    上的
    正在将事件绑定到
    文档
    。事件不会在以后添加。是的……这是我的问题……如上所述,加载DOM后通过单击和ajax调用加载不起作用的内容。非常感谢!
    $(document).on('click', '#mdtable tr', function(e) {
        var localmdid = $(this).find("#mdid").html();
        alert("mdid =" + localmdid);
               });
    
    $("#patienttable tr").click(function() {
           var passthis = $(this).find("#localid").html();
           $.post("php/setsessionvariable.php",
                  {sessionval: passthis},
                  function(e) {window.location.href = "root.php"}
                  );
    });