2015-05-27 82 views

回答

1

这应该解决的问题是Chrome和火狐浏览器:

$('tr.parent') 
    .css("cursor", "pointer") 
    .click(function (e) {     
     if ($(e.target).is('select') || $(e.target).is('option')) { 
      // 
     } else { 
      $(this).css('background-color', 'red'); 
     } 
    }); 

$('tr[class^=child-]').find('td > div, td').hide(); 

JSFiddle test

编辑:如果你不需要做任何简化版点击选择时的动作。

$('tr.parent') 
    .css("cursor", "pointer") 
    .click(function (e) {    
     if (!($(e.target).is('select') || $(e.target).is('option'))) { 
      $(this).css('background-color', 'red'); 
     } 
    }); 

$('tr[class^=child-]').find('td > div, td').hide(); 

JSFiddle test

3

试试这个:

$('tr.parent') 
    .css("cursor", "pointer") 
    .click(function (e) { 
     if($(e.target).is("select")) 
     { 
      //... it was a select 
     } 
     else 
     { 
     //... it was not a select 
     } 
    } 
+0

快速的jsfiddle似乎显示它作为工作,但我很好奇。你知道为什么'是'会工作,而'不是'不会呢?另外,既然我们对'select'没有做任何事情,也许你可以使测试适应'$(e.target).is(':not(select)')'并且放弃'else',那么你是什么认为? (这应该工作太依据我的JSFiddle) – Chop

+0

理解了我的第一个问题的答案:'is'是一个测试,'不'是一个过滤器... – Chop

+1

@Chop正确:-) ......另外 - 这两个结果都是TRUTHY的值 - 所以即使你做了:'$(“body:input”)''你会得到'[]'这是一个空数组,但它是TRUTHY所以if($(“body:input” ))'仍然会像真的 –

0

按照jQuery website,你会使用not与之元素子孙附加该事件! 尝试此

$('tr.parent *').not('select') 
.css("cursor", "pointer") 
.click(function (e) { 
     // do something 
    } 
} 

PS:这可能附着事件不止一次地包含在另一个后裔

+0

尝试,但没有运气。还包括一个jsfiddle – felix001

+0

我认为这是行不通的,因为即使事件没有附加到select,它也被绑定到select所在的单元格中(这是'')。这真是一种遗憾,因为这会非常优雅尽管将处理程序附加到更多的对象)。 – Chop

1

jQuery的not一个元件是过滤器的方法。因此,它生成一个jQuery对象。当没有匹配它时,它仍然返回一个空数组,它不是falsy。因此,您的测试始终得到验证。

您可以使用jQuery的测试运算符is来调整您的测试,它会检查您的对象是否与选择器匹配。下面是Royi Namir's answer优化:

$('tr.parent') 
    .css("cursor", "pointer") 
    .click(function (e) { 
     if($(e.target).is(":not(select)")) { 
      //... it was not a select 
     } 
    }); 
+0

试过但没有运气。还包括一个jsfiddle – felix001

+0

@ felix001好吧,这失败了,但Royi Namir的解决方案有效。请记住,您需要调整您在处理具有代码:根据基体选择和过滤器,'$(本)'是不一样的。参见[JSFiddle](http://jsfiddle.net/0Lh5ozyb/66/)。 – Chop

+0

@ felix001我错了,它确实有效。我没有测试正确的代码。 [新的JSFiddle](http://jsfiddle.net/0Lh5ozyb/67/)。在下拉菜单中启用 – Chop