Javascript jquery单击事件tr或单击输入

Javascript jquery单击事件tr或单击输入,javascript,jquery,Javascript,Jquery,我有以下代码: $(document).ready(function () { $("tr").live('click',function(){ alert("TR"); }); $("input").live('click',function(){ alert("INPUT"); }); }); 如何在不触发tr功能的情况下触发复选框的单击功能?jQuery有什么解决方案吗 我不会在输入函数的末尾设置retur

我有以下代码:

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

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

如何在不触发tr功能的情况下触发复选框的单击功能?jQuery有什么解决方案吗

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

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

您可以在事件对象上使用该方法

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

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

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

由于您似乎使用的是.live()而不是直接事件绑定,因此无法使用stopPropagation()

首先,
.live()
法律代码,已被弃用,这意味着它可以在未来的任何新版本中从库中删除。我不知道你使用的是哪种版本的jQuery,但是你应该考虑移动到最新的(无论如何是更优化的),并使用事件委派。< /P> 尽管如此,如果您不能升级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");
    }
}); 
不是很优雅,但很有技巧。这是一个例子

.live()
的问题是,事件绑定到文档中,因此应用程序会变得更复杂,您可能会在停止传播时遇到麻烦


同时,我用
.on()
()做了一把小提琴,用
.delegate()
()做了一把小提琴。

您需要将
stopPropagation()
添加到
输入
单击处理程序中。它将阻止事件从DOM冒泡到父元素

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

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

OP更新问题:

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

    $("TABLE").delegate("input", 'click',function(e) {
        e.stopPropagation();
        alert("INPUT");    
    });    
});
对输入处理程序使用
stopPropagation()

e.stopPropagation()
在句柄中输入或使用
e.relatedTarget

$("tr").click(function(e){
       if( e.relatedTarget.tagName != "input" )
           alert("TR");
    });

小提琴是一个伟大的东西添加到一个问题,但请也张贴在问题的代码。如果jsFiddle离线,人们可以这样帮助你,这个问题在将来也会很有用。我使用的是live(),而不是click()。你能用
live()
发布你的代码吗。顺便说一句,不要使用live-它速度慢,而且已经被弃用。@Rorymcrossan我认为live()是唯一一个处理被操纵的DOM数据的函数?不是吗?最好使用
delegate()
,或者如果您正在使用jQ1.7+
on()
。我已经为你更新了我的答案;在两个不同的文件之间工作?我的两个函数在不同的js文件中,我认为这就是它不起作用的原因。好吧,它不起作用,因为我使用的是live()而不是click()。将代码放在不同的文件中并不重要。您使用的jquery版本是什么。live()已被弃用,您不应再使用它。看到或