2011-03-11 188 views
0

有一個listitem的問題,當我點擊所需的li時,它什麼都不做。我現在只會讓它警覺,所以我可以看到它會在我確定可以從中獲得響應之後執行此功能。jquery選擇li元素

jQuery的

$('.propid').click(function(){ 
     alert($(this).find().attr('id')); 
    }); 

HTML

<div> 
    <form class='cform'> 
     <div> 
     Type in Property: 
     <br /> 

     <input class="ui-corner-all" type="text" size="30" value="" id="inputString" /> 

     </div> 
     <div class="suggestionsBox" id="suggestions" style="display: none;"> 
     <div class="suggestionList" id="autoSuggestionsList"> 
      &nbsp; 
     </div> 
     </div> 
    </form> 
    </div> 

上鍵入一些suggestionsBox將顯示與阿賈克斯的結果填充。

返回的HTML/PHP是附加到SuggestionxBox:

'<li class="propid" id="'.$result['roomnumber'].'">'.$result['name'].'</li>'; 

不知道爲什麼,當我一個li元素上點擊裏面suggestionBox但不提醒,如果我使用

$('.suggestionBox').click(function(){ 
    alert($(this).find(li:first).attr('id')); 
}); 

真棒回答所有人,但我得到了在HTML中分配一個onclick事件:)

回答

1

請記住在AJAX調用完成後分配onclick事件。只要在加載頁面時將該腳本彈出到頁面上,並不能確保所有將來/延遲加載的元素都會獲得附加的事件處理程序。

簡單的例子:

$.ajax({ 
    type: "POST", 
    url: "URL", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    data: "{'PARAM':'VALUE'}", 
    success: function (result) { 
    $("#autoSuggestionsList").append(result.d); 
    $(".propid").click(function(){ 
     alert($(this).find().attr("id")); 
    }); 
    } 
}); 
+0

當然是啊,是因爲dom不知道嗎? – goingsideways 2011-03-11 06:42:15

+0

是的。正如馬修建議的,你可以嘗試使用live()函數,但我更願意在完成AJAX調用後分配事件處理程序。 – FarligOpptreden 2011-03-11 06:43:45

1

嘗試

$('.propid').live("click",function(){ 
     alert($(this).find().attr('id')); 
    }); 
1

$('.propid').click(function(){ ... });將搜索與他們自己的網頁和綁定click事件 「PROPID」 類元素。但是如果在綁定完成之後會出現一些元素 - 它們將不起作用(不會綁定它們)。

這裏有三種方法。

首先 - 在每個新元素創建後進行綁定。類似於:$('.propid').unbind('.my_propid').bind('click.my_propid', function() { ... })每個ajax調用後(我用命名空間避免綁定兩次)。

其次 - 是爲父元素進行綁定。一個javascript事件可以作爲參數傳遞給你的綁定函數 - 這樣你就可以獲得事件的目標並確定 - 哪個子元素真的被點擊了。 $('. suggestionsBox').click(function (e) { /* work with event e */ });(http://feedproxy.google.com/~r/Bludice/~3/q0r9715M_JA/event-delegate--你可以在這裏閱讀更多關於js的事件委託)。

第三 - 是動態控制新元素(與生活)。 $('.propid').live('click', function() { ... });