9

这类似于 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 代码:

<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

但是,当我单击Option2 Option 3从 ajax 响应中填充的内容时,我在控制台中看不到任何内容。

如果有不清楚的地方,请告诉我。我将尝试进一步解释。

4

1 回答 1

19
$(document).on('click', '.dropdown-menu li a', function () {
    console.log("Selected Option:"+$(this).text());
});

这只是简单的事件委托...页面加载时不存在的元素必须将事件委托给页面加载时确实存在的静态父元素。

我们利用 jQuery 的 .on() 来完成这项工作。

  $(staticElement).on(event, dynamicElement, function(){ //etc });

强制编辑

请不要实际将元素绑定到$(document),而是选择最接近的静态父元素。这是出于性能原因。

于 2013-04-12T19:34:10.283 回答