检测点击了哪个锚点

问题描述 投票:0回答:6

我有很多这样的标签

<a href="javascript:changeFreq()">Anchor 1</a>
<a href="javascript:changeFreq()">Anchor 2</a>
<a href="javascript:changeFreq()">Anchor 3</a>

如何在

changeFreq
函数中识别哪个a被点击了。 我尝试使用
this
指针,但它引用
window
对象。 我无法在这种情况下使用
onclick
事件

有什么想法吗?

javascript html anchor
6个回答
4
投票

使用正确的事件处理程序。
标记

<a href="#" class="anchor">Anchor 1</a>
<a href="#" class="anchor">Anchor 2</a>
<a href="#" class="anchor">Anchor 3</a>

var anchors = document.querySelectorAll('.anchor');

for (var i=0; i<anchors.length; i++) {
    anchors[i].addEventListener('click', handler, false);
}

function handler() {

    // now "this" is the element

}

3
投票

这是一种只有一个事件侦听器的解决方案。这个想法是只附加一个侦听器,然后根据单击的内容委派要执行的操作。这样一来,您就不需要大量听众来完成一个人可以处理的工作。对于这个问题,这样做可能有点矫枉过正,但我确实想提供一个替代方案。

jsFiddle

HTML

<!--
Parent div to have the actual listener. 
Whenever an anchor is clicked, the event will bubble up to the #wrap div
-->
<div id="wrap">
   <!--Each div has a data-freq attribute to pass it's frequency-->
   <a id="a1" href="#" data-freq="1">Anchor 1</a><br>
   <a id="a2" href="#" data-freq="10">Anchor 2</a><br>
   <a id="a3" href="#" data-freq="100">Anchor 3</a><br>
</div>
<!--Print out the frequency-->
<div>Frequency: </div>
<div id="freq">0</div>

JS

// Get the important elements
var wrap = document.getElementById("wrap"),
        freqDiv = document.getElementById("freq");

// Function to let us change frequency
function changeFrequency(amount) {
   freqDiv.innerHTML = amount;
}

// Add only one event listener and let clicks bubble up
wrap.addEventListener("click", function(e) {
   // Change the frequency by the data-freq value
   changeFrequency(e.target.dataset["freq"]);
   // Don't change pages
   e.preventDefault();
});

2
投票

如果您在

this
标签中使用
onclick
,它将把
a
标签引用传递到您的函数中。

http://jsfiddle.net/V3W38/ 例如

<a href="#" onclick="return changeFreq(this)">Anchor 1</a>
<a href="#" onclick="return changeFreq(this)">Anchor 2</a>
<a href="#" onclick="return changeFreq(this)">Anchor 3</a>

Javascript

function changeFreq(element)
{
    // this is reference to the a tag you clicked on
    console.log(element.href);

    return false;
}

0
投票

您是否尝试在函数中添加输入变量?

<a href="javascript:changeFreq(1)">Anchor 1</a>
<a href="javascript:changeFreq(2)">Anchor 2</a>
<a href="javascript:changeFreq(3)">Anchor 3</a>

js:

function changeFreq(anchorId){
     switch(anchorId){
         case 1:
         ///...
         break;
         //...
     }
}

0
投票

在此输入链接描述

如果单击锚标记,则会返回锚标记 href 或 id,并显示在警报中您可以根据需要进行操作

Jquery

$( "a" ).click( handler ).find( "a" );
function handler( event ) {
  var target = $( event.target );
  
  if ( target.is( "a" ) ) {
    alert(target.html());
        alert(target.attr("href"));
      alert(target.attr("id"));
  }
}

CSS

<a href="javascript:changeFreq(this)">Anchor 1</a>
<a href="javascript:changeFreq(this)">Anchor 2</a>
<a id="i1" href="javascript:changeFreq(this)">Anchor 3</a>

0
投票
jQuery('a').click(function (e) {
    e.preventDefault();
    var url = jQuery(this).attr('href');
    var target = jQuery(this).attr('target');
    if (target === '_blank') {
        window.open(url, '_blank');
    } else {
        window.open(url, '_self');
    }
    
});
© www.soinside.com 2019 - 2024. All rights reserved.