2010-04-25 20 views
4

如何处理没有ID的链接?它只有一个类名,如“classbeauty”。如何处理JavaScript中的点击链接?

现在我需要知道用户是否点击了链接。 如果链接被点击,我只需要拨打alert("yes link clicked");

我不知道如何处理JavaScript中的事件。

我该怎么做?

+2

试试jQuery。拿出来喝几杯。看看你是否相处。不需要长期的承诺。 – 2010-04-25 21:22:54

回答

12

如果jQuery是一个选项:

$("a.classbeauty").click(function(){ 
    alert("yes link clicked"); 
}); 

如果您需要纯JavaScript:

var elements = document.getElementsByTagName("a"); 
for(var i=0; i<elements.length; i++){ 
    if (elements[i].className == 'classbeauty') { 
     elements[i].onclick = function(){ 
      alert("yes link clicked!"); 
    } 
} 
} 

如果你需要它Greasemonkey

function GM_wait() { 
    if(typeof unsafeWindow.jQuery != 'function') { 
     window.setTimeout(wait, 100); 
    } else {   
      unsafeWindow.jQuery('a.classbeauty').click(function(){ 
        alert('yes link clicked'); 
       }); 
    } 
} 
GM_wait(); 
+1

为什么不'getElementsByTagName(“a”)'? – BalusC 2010-04-25 21:47:08

2
function getElementsByClassName(class_name) { 
    var elements = document.getElementsByTagName('*'); 
    var found = []; 

    for (var i = 0; i < elements.length; i++) { 
     if (elements[i].className == class_name) { 
      found.push(elements[i]); 
     } 
    } 

    return found; 
} 

getElementsByClassName("YourClass")[0].onclick = function() { alert("clicked"); }; 

这是纯顺便说一下,JavaScript。这里的每个人都喜欢jQuery(包括我)。

+3

您不能在阵列上分配'onclick'。 – bobince 2010-04-25 21:10:43

+0

你在那里看到[0],是吗? – 2010-04-25 21:30:50

+3

不要忘记,元素可以有多个空格分隔的类,所以这个解决方案可能会错过一个以上类的锚点。一个简单的解决方法是添加'var regex = new RegExp(“\\ b”+ class_name +“\\ b”)'然后'if(regex.test(elements [i] .className){'而不是仅仅检查字符串相等的类名称 – maerics 2010-04-25 21:34:16

1
for (var i= document.links.length; i-->0;) { 
    if (document.links[i].className==='classbeauty') { 
     document.links[i].onclick= function() { 
      alert('yes link clicked'); 
      return false; // if you want to stop the link being followed 
     } 
    } 
} 
+1

+1这是一个很好的答案,请正确,不要downvote! – systempuntoout 2010-04-25 21:23:09

+1

-1没有足够的jQuery(只是在开玩笑) – 2010-04-25 22:03:27

0
function handleLinks(className, disableHref) { 
    var links = document.body.getElementsByTagName("a"); 

    for (var i = 0; i < links.length; i++) { 
     if (links[i].className == className) { 
      links[i].onclick = function(){ 
       alert('test') 
       if (disableHref) { 
        return false; //the link does not follow 
       } 
      } 
     } 
    } 

} 

handleLinks('test', true) 

您可以在此链接测试: http://jsfiddle.net/e7rSb/

0

我不知道这是否是一种选择,但我会翻转标志链接被点击的时候,然后就测试该变量。

//javascript 
var _cbClicked = false; 
function checkClicked() { 
    if (_cbClicked) alert("link was clicked"); 
    return false; 
} 

//html 
<a href="#" class="classbeauty" onclick="_cbClicked = true; return false;">Link Text</a> 
<a href="#" onclick="checkClicked();">Check Link</a> 

很简单,纯JS :)

1

如果控制源代码,你可以添加你的脚本嵌入。

<a onclick="alert('yes link clicked'); return false">Link</a> 

如果你的目标的现代浏览器,你可以用getElementsByClassName选择元素。这里有几个人提出了他们自己的这个函数的实现。

var node = document.getElementsByClassName('classbeauty')[0] 
node.onclick = function(event){ 
    event.preventDefault() 
    alert("yes link clicked") 
} 
+1

+1 for preventDefault() – meo 2010-04-25 21:45:59