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()已被弃用,您不应再使用它。看到或