2

这是一个小提琴来证明我的观点。当我使用 时$(document).on("click"....),我仍然可以单击禁用按钮内的标签。此行为不会发生在$("button").click(..

小提琴

有人可以解释这种差异吗?它是一个错误,还是 jQuery 的一个特性?

编辑:我想出的解决方法:

$(document).on("click", "button > *", function() {
    if ( $(this).parent().is(":disabled") )
    {    
        return false;
    }
});

​</p>

4

2 回答 2

1

我认为这种行为是由您将事件应用到的元素造成的。在第一个示例中,您将事件绑定到文档。在第二个示例中,您将事件绑定到按钮。这纯粹是推测,因为我没有查看 jQuery 源代码来实际查看使用 时执行了什么$().on(),但我认为选择器在事件触发后被解析。

例如,document获取点击事件,解析选择器以测试它应该应用于哪个,然后执行该函数。在第二种情况下,选择器在点击事件被绑定之前首先被解析。

于 2012-08-08T13:37:05.673 回答
0

这一定是 JQuery 1.7.1 的一个错误。如果您移至 1.7.2 或 1.8,它就会消失。

于 2012-08-10T18:32:25.837 回答