2012-03-07 36 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')