2011-10-04 104 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