我有這樣的設置JavaScript事件冒泡
<div onclick="SomeEvent"> <input type=checkbox value=1>1 <input type=checkbox value=2>2 <input type=checkbox value=3>3 </div>
的問題時,上的複選框用戶點擊我不想SomeEvent解僱。
在某些事件中,我確實有行
「event.stopPropagation();」
但這似乎什麼都不做。
我有這樣的設置JavaScript事件冒泡
<div onclick="SomeEvent"> <input type=checkbox value=1>1 <input type=checkbox value=2>2 <input type=checkbox value=3>3 </div>
的問題時,上的複選框用戶點擊我不想SomeEvent解僱。
在某些事件中,我確實有行
「event.stopPropagation();」
但這似乎什麼都不做。
更改內嵌的onclick這樣:
onclick="SomeEvent(this, event)"
然後在SomeEvent
,這樣做:
function SomeEvent(el, event) {
var target = event.srcElement || event.target;
if(el === target) {
// run your code
}
}
當您單擊div
元素本身,而不是這隻會火碼後裔。
如果有應該火處理程序等的後裔,那麼這樣做:
function SomeEvent(el, event) {
var target = event.srcElement || event.target;
if(target.nodeName.toLowerCase() !== 'input' || !target.type || target.type !== 'checkbox') {
// run your code
}
}
這將觸發處理程序,除了那些上的複選框的任何點擊。
如果事件冒泡模型,事件傳播是從內部元素到外部元素。
這意味着event.stopPropagation();應該在輸入的事件中而不是div中。
<div onclick="SomeEvent">
<input type=checkbox value=1 onclick="stopPropagation()">1
<input type=checkbox value=2 onclick="stopPropagation()>2
<input type=checkbox value=3 onclick="stopPropagation()>3
</div>
現在的Javascript代碼:
function stopPropagation() {
//... do something.
//stop propagation:
if (!e) var e = window.event;
e.cancelBubble = true; //IE
if (e.stopPropagation) e.stopPropagation(); //other browsers
}
更多信息:http://www.quirksmode.org/js/events_order.html
編輯:以上是一個快速的方式來顯示冒泡模型的工作原理,但更好的回答使用JQuery解決這個問題將是:
<div id="mydiv">
<input type="checkbox" value="1" /> 1
<input type="checkbox" value="2" /> 2
<input type="checkbox" value="3" /> 3
</div>
現在的Javascript代碼:
$('#mydiv').click(function(e) {
//do something
});
$('#mydiv input').click(function(e) {
//stop propagation:
if (!e) var e = window.event;
e.cancelBubble = true; //IE
if (e.stopPropagation) e.stopPropagation(); //other browsers
});
我不喜歡我必須將代碼添加到複選框以防止發生點擊。 – 2011-05-11 23:58:25
這只是一個簡單的例子,但是如果你使用JQuery,正確的方法是使用類似$('#element1 input')。click(stopPropagation()); 我會更新我的答案。 – 2011-05-12 00:15:25
我喜歡這種潛力,因爲我可以將每個事件限制爲一種方法。不過,我正在使用jQuery來附加事件。在附加事件中,event.target.id和event.srcElementid始終爲空。 this.id返回正確的ID。 – 2011-05-11 23:55:45