如何在bootstrap下拉列表中获取Selected元素,其中下拉列表是动态填充的

时间:2013-04-12 19:26:14

标签: javascript jquery html ajax twitter-bootstrap

这类似于 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时,我在控制台中看不到任何内容。

如果有什么不清楚,请告诉我。我会尝试进一步解释。

1 个答案:

答案 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),而是选择最接近的静态父元素。这是出于性能原因。