我試圖選擇一個點擊事件的div但不是所述div內的輸入。我認爲這樣做,但它不起作用。這裏是一個demo。謝謝選擇div但在div內沒有輸入jQuery的
HTML
<div id = "test"><input></div>
JS
$('#test:not(input)').click(function(){
alert();
});
我試圖選擇一個點擊事件的div但不是所述div內的輸入。我認爲這樣做,但它不起作用。這裏是一個demo。謝謝選擇div但在div內沒有輸入jQuery的
HTML
<div id = "test"><input></div>
JS
$('#test:not(input)').click(function(){
alert();
});
你可以檢查,看看是否點擊的元素是使用input
元素!$(e.target).is('input')
$('#test').on('click', function (e) {
var $target = $(e.target);
if (!$target.is('input')) {
alert('clicked');
}
});
當你點擊輸入,點擊事件冒泡到它上面的div。
您可以通過在事件對象上調用stopPropagation
或stopImmediatePropagation
來停止此操作。
http://jsfiddle.net/t66f06oL/1/
$('#test').on('click', function() {
alert();
});
$('#test').on('click', 'input', function(e) {
e.stopImmediatePropagation();
});
感謝您的解釋。 +1 – user2014429 2015-02-09 02:59:11
當你點擊input
控制你的click
事件實際上是由父DIV抓獲。你可以通過改變你的代碼來解決這個問題:
$('#test:not(input)').click(function(){
alert();
});
$('#test').find('input').click(function(e){
e.stopPropagation();
});
一個很好的解決方法,但是沒有辦法只選擇非輸入嗎? – user2014429 2015-02-09 02:52:04
@ user2014429那麼你將不得不使用'$('#test:not(input)')'。 http://jsfiddle.net/ejvmhe6o/ – 2015-02-09 02:53:18
這似乎是最簡單的方法。謝謝 – user2014429 2015-02-09 03:17:43