我有兩個div,一個大,另一個小一些,每個div都有自己的OnClick方法。我遇到的問題是當我點擊較小的div時,大div的OnClick方法也被調用。兩個不同點擊兩個div,一個在另一個
我可以避免這種情況?
我有兩個div,一個大,另一個小一些,每個div都有自己的OnClick方法。我遇到的問題是當我點擊較小的div時,大div的OnClick方法也被調用。兩個不同點擊兩個div,一個在另一個
我可以避免這種情況?
檢測點擊了哪個元素的最好方法是分析事件的目標(點擊事件)。我爲這個案例準備了一個小例子。你可以在下面的代碼中看到它。
function amIclicked(e, element) { e = e || event; var target = e.target || e.srcElement; if(target.id==element.id) return true; else return false; } function oneClick(event, element) { if(amIclicked(event, element)) { alert('One is clicked'); } } function twoClick(event, element) { if(amIclicked(event, element)) { alert('Two is clicked'); } }
這個JavaScript方法你執行你的腳本
例
<style> #one { width: 200px; height: 300px; background-color: red; } #two { width: 50px; height: 70px; background-color: yellow; margin-left: 10; margin-top: 20; } </style> <div id="one" onclick="oneClick(event, this);"> one <div id="two" onclick="twoClick(event, this);"> two </div> </div>
我希望這有助於之前被調用。
如果您決定使用諸如www.jquery.com之類的JavaScript庫,則可以使用傳播預防選項輕鬆完成要執行的操作。
你不需要使用jQuery或其他任何東西,它很容易用普通的javascript來完成。 – 2010-01-06 18:00:53
你正在處理的是事件冒泡。看看這篇文章:http://www.quirksmode.org/js/events_order.html。
基本上,從傳遞給父元素停止的情況下,你可以使用這樣的事情:
document.getElementById('foo').onClick = function(e) {
// Do your stuff
// A cross browser compatible way to stop propagation of the event:
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
}
您正在運行到事件傳播的一個常見的情況。查看quirksmode.org以獲取關於究竟發生了什麼的全部細節。基本上,你需要在較小的div的點擊處理程序做的是這樣的:
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
我假設這些元素是嵌套的。 – SLaks 2010-01-06 17:58:24
你可以發佈演示嗎?你可以使用http://jsbin.com。 – SLaks 2010-01-06 18:06:43