2012-03-07 88 views
2

我有以下HTML元素:jQuery的单击或鼠标悬停功能没有得到打

<a href='#' class='receipt' id='{some id. generated dynamically}'>Receipt</a> 

我有以下的jQuery,处理点击:

$('.receipt').click(function() { 
       alert('hai'); 
       alert($(this).attr('id')); 
      }); 

出于某种原因,当我点击....什么都没发生。我最初试图使用mouseover,但我认为我做错了,所以我试着click。没有骰子..我在这里错过了什么?

更新 - 这是怎么结束了工作,我使用.live超过.on杰夫乙建议,但我敢肯定.on会很好的工作。

$('.receipt').live('click', function() { 
    alert('hai'); 
    alert($(this).attr('id')); 
}); 

更新2 - .on将在未来取代.live,所以你应该使用.on

+0

应该是'$('。receipt')。click(...' – CAbbott 2012-03-07 20:29:01

+0

它适用于我在jsFiddle中,你必须有一些其他的代码来操纵那个链接。 – Igor 2012-03-07 20:34:38

+0

这已经在那里了......我只是输入了它为什么这是downvoted? – Cody 2012-03-07 20:35:08

回答

4

你提到id是动态生成的。如果该元素是在处理程序创建后创建的,则不起作用。

对于动态元素,使用.on()

$('body').on('click', '.receipt', function() { 
    alert('hai'); 
    alert($(this).attr('id')); 
}); 

在这种情况下,body是基本处理点击,一旦事件向上行进的DOM元素,然后确保它起源于.receipt。您可以使用.receipt div的父/祖代的任何元素,而不是使用body,最好使用更接近的元素。

因为body处理点击,处理程序被附加到总是存在的东西。通过这种方式,您可以添加和删除.receipt元素,而无需担心处理程序消失。

+0

Ahhhhhhhhhhh ....就是这样。我现在使用'.live'而不是'.on' - 你知道是否有区别吗?谢谢! – Cody 2012-03-07 20:37:13

+1

实际上,不是,但是在jQuery的更高版本中,'.live()'被弃用,赞成'.on()'替换'live','delegate'和'bind'。请参阅函数说明之后的第一段:http://api.jquery.com/on/ – 2012-03-07 20:39:27

2

变化$('receipt')$('.receipt')

+0

那已经在那里,对不起..typo。 – Cody 2012-03-07 20:31:02

+0

如果它仍然不工作,请检查'Jeff B'' .on()'解决方案。 – arunes 2012-03-07 20:33:53

1

你缺少一个 ''在你的选择器中。它用于选择类。

应该是:$('.receipt')

1

你需要使用$('.receipt')访问DIV与它的CSS选择器

1

您需要添加一个.字符使用类选择

$('.receipt').click(function() { 
    alert('hai'); 
    alert($(this).attr('id')); 
}); 

class selector docs here

+0

那已经在那里了,对不起。 – Cody 2012-03-07 20:31:23

0

你一定要请记住,当你使用类时,你必须编写.className,如果你使用id,你必须使用#idName,因为你必须将$('receipt')更改为$('。receipt')