2011-03-11 175 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() { ... });