2015-02-09 40 views

回答

2

你可以檢查,看看是否點擊的元素是使用input元素!$(e.target).is('input')

Updated Example

$('#test').on('click', function (e) { 
    var $target = $(e.target); 

    if (!$target.is('input')) { 
     alert('clicked'); 
    } 
}); 
+0

一個很好的解決方法,但是沒有辦法只選擇非輸入嗎? – user2014429 2015-02-09 02:52:04

+0

@ user2014429那麼你將不得不使用'$('#test:not(input)')'。 http://jsfiddle.net/ejvmhe6o/ – 2015-02-09 02:53:18

+0

這似乎是最簡單的方法。謝謝 – user2014429 2015-02-09 03:17:43

1

當你點擊輸入,點擊事件冒泡到它上面的div。

您可以通過在事件對象上調用stopPropagationstopImmediatePropagation來停止此操作。

http://jsfiddle.net/t66f06oL/1/

$('#test').on('click', function() { 
    alert(); 
}); 

$('#test').on('click', 'input', function(e) { 
    e.stopImmediatePropagation(); 
}); 
+0

感謝您的解釋。 +1 – user2014429 2015-02-09 02:59:11

1

當你點擊input控制你的click事件實際上是由父DIV抓獲。你可以通過改變你的代碼來解決這個問題:

$('#test:not(input)').click(function(){ 
    alert(); 
}); 

$('#test').find('input').click(function(e){ 
    e.stopPropagation(); 
});