2011-07-27 33 views
1

我有一个包含一个表如何获得元素的jQuery onClick事件时,它们含有海誓山盟

<div id="container"> 
<table id="data"> 
<tbody> 
...... 
...... 
</table> 
</div> 

我已经bindind上表中的行onclick事件一格,这样,如果用户点击一排,这是突出显示

$("#data tr").mouseup(function() { 

     $("tr.selected").removeClass("selected");// Deselect currently selected rows 
     $(this).addClass("selected");  
     }); 

现在如果用户在表格外点击某处,我想取消选择该行。问题是,如果我绑定单击事件与div,表和div都获得回调...我怎么才能得到一个回调的div?这样我就可以取消选择行!我甚至尝试将onClick与body元素绑定在一起,但是如果你用一个元素绑定一个事件,它里面的所有元素都会得到回调。如果多数民众赞成在这种情况下,我如何取消选择行,然后如果用户单击表的边界外。

+1

在关于“所有里面的元素会得到回调”,他们没有真正得到回调,但事件不冒泡的层次(直到文档对象),并沿着这条路线触发容器元素的回调。这就是Semyazas指出需要stopPropagation的原因。 –

+0

是的,我现在知道...谢谢! – samach

回答

3

这是由嵌套元素冒泡引起的。您可以停止使用

$("div").click(function(e) { 


      if($(this).attr('id')=="data") 
      { 
       e.stopPropagation(); 
       return; 
      } 


       $(".selected").removeClass("selected"); 

     }); 

     $("#data tr").mouseup(function() { 


     $("tr.selected").removeClass("selected");// Deselect currently selected rows 
     $(this).addClass("selected");  

     }); 

来源:http://api.jquery.com/event.stopPropagation

+0

非常感谢Semyazas .... dint了解stopPropagation()。它解决了这个问题。虽然我不希望将stopPropagation()放在表格行.mouseUp事件中。即时编辑你的答案,以便其他人在搜索可以知道确切的解决方案。希望你不要介意。 – samach