这类似于 How to Display Selected Item in Bootstrap Button Dropdown Title
唯一的区别是,我的下拉列表不是静态的,而是通过ajax响应填充的。
代码下方不仅适用于动态填充的 <li>
项目。
为了测试上面的内容,当我点击该项目时,我故意放置一个静态<li>
,我可以在控制台中看到成功消息。但是,当我点击动态附加的<li>
时,我在控制台中没有得到任何东西。
我相信,我在这里缺少一些jQuery基础知识。 jQuery大师,评论/想法?
以下是一些进一步澄清的代码。
Java脚本代码:
在控制台中打印所选选项
$(".dropdown-menu li a").click(function () {
console.log("Selected Option:"+$(this).text());
});
从ajax JSON响应中填充下拉列表
$.each(response, function (key, value) {
$("#dropDownUL").append("<li> <a tabindex=\"-1\" href=\"#\" align=\"left\"> " + value + "</a> </li>");
})
HTML code:
<div class="dropdown btn">
<div id="dropDownId" class="dropdown-toggle" id="dLabel" role="button" data-toggle="dropdown" data-target="#">
Collections
<b class="caret"></b>
</div>
<ul id="dropDownUL" class="dropdown-menu pull-left" role="menu" aria-labelledby="dLabel">
<li><a tabindex="-1" href="#" align="left">Static test Option</a></li>
</ul>
</div>
所以,再一次,如果我点击Static test Option
我可以在控制台中看到消息:Selected Option: Static test Option
但是,当我点击从ajax响应中填充的Option2
Option 3
时,我在控制台中看不到任何内容。
如果有什么不清楚,请告诉我。我会尝试进一步解释。
答案 0 :(得分:19)
$(document).on('click', '.dropdown-menu li a', function () {
console.log("Selected Option:"+$(this).text());
});
这只是简单的事件委托...在页面加载时不存在的元素必须将事件委托给页面加载时确实存在的静态父元素。
我们利用jQuery的.on()来完成此任务。
$(staticElement).on(event, dynamicElement, function(){ //etc });
强制修改
请不要将元素绑定到$(document)
,而是选择最接近的静态父元素。这是出于性能原因。