2011-10-04 121 views
1

我試圖檢測某個元素是否在onbeforeunload上單擊。我無法讓它工作。下面是JavaScript代碼和HTML代碼的項目的例子(請注意,我在HTML元素無法控制,因爲它不是我的網站)提前檢測Href被點擊

function checkLeave() { 
    var p = document.getElementByElementById('yeah'); 
    if (p.href.onclick) { 
     //do something 
    } 

    else { 
     //do something else 
    } 
    } 
window.onbeforeunload = checkLeave; 


HTML CODE 
//The goSomewhere goes to another page 
<a id="yeah" href="javascript:goSomewhere();"> 
    <img src="smiley.png"> 
</a> 

感謝, Ĵ

回答

1

你需要做的是綁定的事件處理程序在頁面上的每個<a href=""></a>什麼。 這可以通過以下方式完成:

// Select all links 
//var allLinks = document.querySelectorAll('a[href]'); 
var allLinks = document.links; 

// Bind the event handler to each link individually 
for (var i = 0, n = allLinks.length; i < n; i++) { 
    //allLinks[i].addEventListener('click', function (event) {}); 
    allLinks[i].onclick = function() { 
     // Do something    
    }; 
} 
+0

不需要qSA,在每個使用的瀏覽器中都有一個[document.links](http://www.w3.org/TR/) DOM-Level-2-HTML/html.html#ID-7068919)集合即文檔中的所有鏈接。另外,* addEventListener *至少不支持IE <9。 – RobG

0

你正在測試onclick屬性是否存在<a>標籤。它不存在於標記中。標記不是使用onclick,而是將腳本作爲元素的href調用。所以你需要在href中尋找一個腳本來代替:

var p = document.getElementByElementById('yeah'); 
if (p.href.indexOf("javascript") === 0) { 
    //do something 
} 
else { 
    // do something else 
} 
0

也許這樣? (只是想法)

document.getElementById('yeah').onclick = function() { 
    clicked = this.href; 
}; 
+0

這對我有效。但是,我在看網站,似乎有一些沒有ID的元素。 – jeezyfreezy

+0

你可以使用jQuery嗎?這將簡化它很多^。^ - 更好地結合此方法與greenfir3的 – Chango