【发布时间】:2013-07-16 13:54:56
【问题描述】:
几周前,我正在处理我的项目并编写了一些代码来使表格行可点击(去过那里,做到了)。 此代码以前使用过,没有问题。浪费了一天时间试图让代码工作(即使我之前已经做过多次) - 我试图让它工作的一些事情是 a - 将所有内容的 id 更改为 class, b - 将代码从脚本部分的底部移动到顶部,c - 重命名变量,d - 在变量前面添加“var”,减去var from 在变量前面,e - 将所有单引号改为双引号,将所有双引号改为单引号,f - 更改表名,g - 尝试点击表格而不是行,h - 将表格放入 div 中,将表格从 div 中取出,等等等等。
没有什么是成功的,所以作为最后的手段,深夜,我将 .click 切换到 .on(click - 出乎意料的惊喜 - 一切正常。
昨天发生了同样的事情,但我没有做 a - h ,而是直接将 .click 更改为 on(click.
这里是sn-ps的两个代码:
$("#mdtable tr").click(function() {
var localmdid = $(this).find("#mdid").html();
alert("mdid =" + localmdid);
});
$(document).on('click', '#mdtable tr', function(e) {
var localmdid = $(this).find("#mdid").html();
alert("mdid =" + localmdid);
});
上面的永远不工作,下面的总是有效(我评论他们)。
这是来自另一个页面的代码 sn-p 可以正常工作:
$("#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 直接相关,因此对我来说,如果一个有效,那么另一个应该有效。
作为一个菜鸟,我想成为一个更好的程序员,尽管我的代码可以使用 .on(click,但我想知道为什么我的 .click 不起作用(智力练习)。
所以我的问题是:
.click 和 .on(click 真的相关吗?
我在 click sn-p 中遗漏了什么明显的东西,使其无法正常工作?
关于这个问题有什么不同的方法吗?
再次感谢您
【问题讨论】:
-
api.jquery.com/on 阅读有关直接事件和委托事件的信息。
-
@j08691 我会说是的,因为第一个不起作用
-
$('foo').click(...)与$('foo').on('click, ...)等效。但是您使用不同的选择器/元素将处理程序绑定到(在第一种情况下为#mdtable tr,在第二种情况下为document),因此它们在您的情况下不等价。您正在使用 事件委托,这在 jQuery 学习中心得到了很好的解释:learn.jquery.com/events/event-delegation. -
@roasted - 我很确定我知道答案,我只想得到 OP 的确认。
-
@Kathiravan 这显然是错误的。区别不在于
click()或on(),而在于事件是否委托。on()允许您创建直接和委托事件,而click()只允许前者。