2011-11-03 90 views
0

我有下面的代碼在我的網頁:爲什麼這個點擊處理程序不能在JQuery中工作?

var offer_link = $('<a>').addClass('fc-offer-link'); 
offer_link.click(function() { 
    alert('Hello'); 
}); 

offer_link.attr('href', "#" + this.id); 
offer_link.append(this.subject); 

this.list_item = $('<li>'); 
this.list_item.append(offer_link); 

但即使鏈接出現在頁面上,處理程序不會被調用。這是怎麼回事?

+5

[SSCCE(http://sscce.org)請。 –

+0

在安裝點擊處理程序之前,您是否正在等待文檔使用'$(document).ready()'加載?或者在文檔的末尾(不在HEAD部分中)運行文檔的主體? – jfriend00

+2

'this'是指什麼?另外,我想冒險改變爲'$(offer_link).live('click',function(){alert(...);});'可能會工作。 –

回答

1

原來,這個問題成爲該項目插入到DOM中的位置。它被使用插入:

$('#my_list').html(my_new_list.html()) 

應該一直在使用:

$('#my_list').replaceWith(my_new_list) 
+0

是的,當你使用'html'方法時,你基本上是將DOM元素序列化爲一個字符串。如果設置了HTML字符串,則會創建與您綁定事件處理程序的元素不同的新元素。 –

-1

我想你只需將鏈接添加到一個元素,像這樣:

<script type="text/javascript"> 
    $(function(){ 
     var link = $("<a>Click Me!</a>").addClass("fc-offer-link").appendTo($("#div1")); 
     if (link){ 
      link.click(function(){ 
       alert("Hey there!"); 
      }); 
     } 
    }); 
</script> 
<div id="div1"></div> 

編輯:不知道爲什麼,我downvoted,但這裏有一個jsFiddle

+1

那麼,OP說,該鏈接出現在頁面上...... –

+0

@Interstellar_Coder請參閱問題評論中的JSFiddle鏈接,綁定事件處理程序沒有任何問題在將元素注入文檔之前 – Phil

+0

@Interstellar_Coder:處理程序在鏈接添加到DOM之前還是之後綁定無關緊要。 –

相關問題