javascript - jquery 点击事件 tr 或输入被点击

标签 javascript jquery

我有以下代码:

$(document).ready(function () {
    $("tr").live('click',function(){
       alert("TR");
    });

    $("input").live('click',function(){
        alert("INPUT");    
    });    
});

Fiddle here

如何只触发复选框的点击功能而不触发 tr 功能? jQuery 有什么解决方案吗?

我不会在输入函数的末尾设置 return false,我也确实需要 tr 元素。

信息: event.stopPropagation不适用于 live() 事件。

最佳答案

您可以使用 stopPropagation()事件对象上的方法。

它将在不取消默认事件行为的情况下防止事件冒泡。

$(document).ready(function () {
    $("tr").click(function(){
       alert("TR");
    }); 

    $("input").click(function(e){
        alert("INPUT");    
        e.stopPropagation();
    });    
});

因为看起来您使用的是 .live() 而不是直接事件绑定(bind),所以您不能使用 stopPropagation()。

首先,.live()遗留代码并已被弃用,这意味着它可能会在未来的任何新版本中从库中删除。我不知道您使用的是哪个版本的 jQuery,但您应该考虑转向最新版本(无论如何都更优化)并使用 .on()用于事件委托(delegate)。

不过,如果您无法升级您的 jquery 库,这里也许可以解决您的问题。传递给所有事件处理程序的事件参数包含一个属性 target,它引用启动事件的元素。所以你可以这样做:

$("tr").live('click',function(e){
    if (e.target.nodeName !== "INPUT") {
    // if ($(e.target).is('input') === false) { // jquery style but maybe less efficient
       alert("TR");
    }
}); 

不是很优雅,但可以解决问题。这是一个 example .

.live() 的问题是事件被绑定(bind)到文档,因此随着您的应用程序变得越来越复杂,您可能会为停止传播而头疼。

与此同时,我使用 .on() ( here ) 和 .delegate() ( here ) 制作了一个 fiddle 。

关于javascript - jquery 点击事件 tr 或输入被点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8803473/

相关文章:

javascript - JSON 和 jQuery 搜索

javascript - 如何选择显示值而不是 VALUE 选项?

javascript - Angular 路线不会加载 templateUrl

javascript - 切换除一项之外的所有选项,然后切换异常(exception)的一项?

jquery - 使用 css3 和 jquery 翻转

javascript - 谷歌应用程序脚本 html 选择从电子表格数据加载的选项

javascript - jQuery为多个输入添加点击功能

jquery - 添加 DOM 元素然后将其删除

javascript - 在给定时间后反转 jQuery 效果

javascript - 具有范围数值的输入框的 KeyUp 事件的 Jquery Regex