2012-12-17 34 views
0

阻止点击事件我有以下代码:从另一个click事件

$(function() { 
    $(li).click(doThis); 

    $(a.clickMe).live('click', doThat); 
}); 

而且我想点击a.clickMe时遮挡doThis。 a.clickMe位于li的内部...我想查看点击来源的来源,以便看看是否点击了a.clickMe。

谢谢!

+0

riiiiiiigggghhhhttttttt ........ – Chanckjh

+0

为什么使用'.live()'? (我确定这里是错误的东西,但我想知道是否希望它能帮助解决其他一些不需要的要求。) – nnnnnn

+0

必须使用live(),因为页面的其他部分使用ajax加载 – webwrks

回答

1

“我要检查,看看点击的来源是从哪里来的”

好吧,或许是这样的:

$(function() { 
    $("li").click(function(e) { 
     if ($(e.target).is("a.clickMe")) 
      return doThat.call(this, e); 
     else 
      return doThis.call(this, e); 
    }); 
}); 

也就是说,在li元素的点击处理程序中测试event.target element是否为"a.clickMe"元素之一,如果是,请调用doThat()(设置this并传递event对象)。否则请致电doThis()

+0

完美!我实际上使用if(!$(e.target).is(“a.clickMe”))...并且我仍然可以使用live(),这是我需要的b/c ajax使用 – webwrks

+1

请注意'$(“a。 ('click',doThat)''可以替换为'$(document).on('click','a.clickMe',doThat)' - 它会有相同的效果,效率更高(因为它避免了在绑定时间无意义地选择所有'a.clickMe'元素)。更好的做法是使用'.on'的相同格式,但用'a.clickMe'元素的另一个元素替换'document'。 – nnnnnn

0

您可以阻止点击事件从传播到li

$(a.clickMe).live('click', function(e) { 
    e.stopPropagation(); 

    // Now, the event won't bubble up to the `li` and won't trigger its event handler. 
}); 
+0

可能想通过'.live()'把''on()'推向'。 – j08691

+1

您无法停止在'.live()'处理程序中传播的事件,因为它已经传播。 – nnnnnn

+0

不幸@ j08691它不工作瓦特/生活,但好主意 – webwrks