2012-02-11 75 views
3

我想操控跨一组链接的点击事件与普通类的所有元素,因此试图通过添加第二类像下面接近这一点:jQuery的选择

<a href="..." class="foo external">Test 1</a> 
<a href="..." class="bar external">Test 2</a> 
<a href="..." class="car external">Test 3</a> 
<a href="..." class="dar">Don't handle this one</a> 

然后尝试这个jQuery选择器选择链接上的“外部”类:

$('a.external').click(function(e) { 
    do something here... 
}); 

但是,这不像我预期的那样工作。什么是正确的方式来处理这个问题?我应该只使用像下面这样的通配符选择器还是有更好的方法?

$('[class^="someclass"]').click(function(e) { 
.... 
}); 
+0

你如何“期待”它的工作?一切似乎都很好... – shaunsantacruz 2012-02-11 03:25:06

+0

通过什么措施它不是“工作?”你在做什么决定? 'console.log','alert'? – imakewebthings 2012-02-11 03:33:40

回答

2

你有什么是完全正确的(虽然电子可能是没有必要function(e)你的情况)。

<a href="#1" class="foo external">Test 1</a> 
<a href="#2" class="bar external">Test 2</a> 
<a href="#3" class="car external">Test 3</a> 
<a href="#4" class="dar">Don't handle this one</a> 

<script> 
    $('a.external').click(function(e) { 
     // will print the href in a javascript alert box 
     alert($(this).attr('href')); 
    }); 
</script> 

至于我可以告诉唯一的可能就是你的<script>实际上是你上面的<a>标签 - 你的脚本不能点击侦听器添加到锚因为他们还不存在。 如果是这样,你需要包装的JavaScript在$(document).ready(function(){ /* code here */ });

而且,无需对external类,只需使用“选择所有绝对锚,但不是那些链接到我的域名”选择:$('a[href^="http://"]').not('[href^="http://mydomain.com"]')

1

我试过了jsFiddle它工作。

click()函数有一个额外的括号。 请注意你的function(e)你有左括号,删除。

您应该结束了与此:

$('a.external').click(function(e) { 
    do something here... 
}); 
+0

对不起,我只是一个错字,在我的代码中,括号是正确的。我更新了原来的问题。 – TMC 2012-02-11 03:21:18

0

尝试:http://jsfiddle.net/n6JJ3/

$('a.external').click(function() { 
    jQuery(this).css('background','red'); 
});​ 
+1

请不要只发布链接到jsFiddle。发布相关代码。 – Gabe 2012-02-11 03:26:10

2

我会猜测你的问题是点击链接实际上使它在某处导航?您需要告诉浏览器忽略正常的链接行为。否则,您的点击功能将运行,然后它会立即导航到'href'网址。还要确保这是全部包装在一个准备好的功能。

$(function() { 
    $('a.external').click(function(e) { 
    // Do whatever   

    e.preventDefault(); 
    }); 
}); 
+0

'e.preventDefault()'是否需要作为最后的语句或开始? – TMC 2012-02-11 19:33:02

+0

只要在函数返回前调用它就没关系。 – loganfsmyth 2012-02-11 20:16:27