0

如果我有这样的代码:

<script>
function determine()
{
    // ????
}
</script>

<a href="blah1" onclick="determine()">blah1</a>
<a href="blah2" onclick="determine()">blah2</a>

在确定()中有没有办法查看点击了哪个链接?

(是的,我知道,简单而正确的做法是将“this”传递给确定()......但在这种情况下,由于遗留代码问题,这并不容易。)

编辑:我可能应该在一开始就提到这一点......我们的网站目前没有使用(并且暂时不能使用)JQuery......所以JQuery的答案(虽然对于这类问题通常很有价值)不会' t 实际上帮助我。

4

6 回答 6

4

从 quirksmode查看此链接。您可以获得事件目标。

function doSomething(e) {
    var targ;
    if (!e) var e = window.event;
    if (e.target) targ = e.target;
    else if (e.srcElement) targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
        targ = targ.parentNode;
}
于 2009-06-01T19:15:26.613 回答
2

你可以直接使用 JavaScript,但我更喜欢使用 jQuery 之类的东西:

<a href="blah1">blah1</a>

<script type="text/javascript">
  $('a[href=blah1]').click(function() {
    var link = $(this); // here's your link.
    return false; // acts like the link was not clicked. return true to carry out the click.
  });
</script>

假设您正在使用该$().click()功能,$(this)将为您提供链接。

于 2009-06-01T19:16:56.440 回答
1

如果您无法更改 HTML 中的 onclick="determine()",但可以更改 determine() 函数,那么我认为您最好的选择是:

将determine() 函数留空,这样它就不会做任何事情。

使用javascript(如其他答案所述)为每个链接添加一个真正的点击处理程序,并使用该事件来确定点击了哪个链接,然后执行所需的代码。

于 2009-06-01T19:44:56.883 回答
0

您可以像这样向每个链接添加事件

links = document.getElementsByTagName('a');

for (link in links) {

   link.onclick = function() {
      alert(this.id);
      determine(); // or some other important code?
   }

}
于 2009-06-01T19:15:56.990 回答
0

另一种解决方案:

将 onclick 处理程序添加到文档。当用户单击链接时,单击事件将“冒泡”到窗口,您将有权访问该事件以确定单击了哪个链接。

如果您只想为那些已经具有 onclick="determine()" 的链接运行代码,这可能很有用 - 您可以设置 determine() 函数来设置一个变量。然后,当用户单击链接时,determine() 函数运行以设置变量,当文档单击处理程序运行时,您可以检查变量 - 然后您将知道链接具有 onclick="determine()"。

让我知道我是否可以让你更复杂一点...... :-)

于 2009-06-01T19:51:14.780 回答
0

如果您无法更改onclick属性,请通过 JavaScript 对其进行修补:

// use a DOMContentLoaded hack or `onload` as fallback
onload = function() {
    var links = document.links;
    for(var i = 0; i < links.length; ++i) {
        // there might be a better way to check which links to modify
        // don't know without further details
        if(/determine\(\)/.test(links[i].onclick))
            links[i].onclick = determine;
    }
};

function determine() {
    // the link is now available as `this`
    alert(this.href);
}

也许更好的解决方案是event为符合标准的浏览器修补一个全局的 IE 样式对象:

if(document.addEventListener) {
    document.addEventListener('click', function(e) {
        window.event = e;
    }, true);
}

function determine() {
    var src = event.target || event.srcElement;
    alert(src.href);
}
于 2009-06-01T20:07:30.863 回答