2015-05-27 123 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