【问题标题】:Bind on(keyup) to dynamic elements in jQuery (Twitter Bootstrap + typehead)将 on(keyup) 绑定到 jQuery (Twitter Bootstrap + typeahead) 中的动态元素
【发布时间】:2012-04-03 11:16:26
【问题描述】:

我想你们中的一些人看到这个标题一定皱起了眉头吧?我敢肯定人们每次都会问这个问题,但是,我还没有看到我的特定问题,所以我正在尝试!将事件绑定到动态创建的元素是我的氪石,我就是无法绕开它......

好吧,我正在使用带有 typehead() 插件的 Twitter Boostrap。我正在使用this trick 使其与远程数据源一起工作。在这一点上,一切正常。我单击表单中的文本输入,为其标记,然后脚本会加载外部源并出现下拉列表。但是我有动态元素创建,你已经想到,它对它们不起作用。我正在探索live() 方法,但是看看脚本是如何被触发的,我只是不确定如何实现它。

$('#anInputField').typeahead().on('keyup', function(ev){
 // stuff happens
});

每次有keyup时,脚本都会触发一个json请求,检查他的东西,并将结果返回给typehead(),他负责自动完成部分工作。那么如何让 jQuery 查看初始绑定后创建的#aDropdownID 呢?我继续检查是否可以使用live(),但由于on() 取代了它......我一无所知!

任何帮助表示赞赏!

【问题讨论】:

    标签: jquery twitter-bootstrap jquery-events keyup


    【解决方案1】:

    这对我有用:

    $(document).on('keyup', '#YourInputFieldId', function () {
        //stuff happens
    });
    

    【讨论】:

      【解决方案2】:

      要让on() 能够委托,您必须在您知道始终存在的静态元素上调用它,然后传递动态元素,例如:

      $('#static-parent').on('keyup', '#aDropdownID', function(ev){
       // stuff happens
      });
      

      如果你没有静态父元素,那么你总是可以使用body

      【讨论】:

      • 所以

        可以有“keyup”事件?
      • keyup 事件发生在 #aDropdownID。如果没有 html,我无法分辨那是什么。。
      • 我不太清楚,真的。只是编辑了 id 名称,所以它更聪明。除此之外,在页面本身上,它看起来像`

        ` 是

        [...]

        按需动态重复.
      • 不,行不通。目前,使用非动态元素,它的工作方式如下:$('input[id^="autocomplete"]').typeahead().on('keyup', function(ev){ //doing things }); ...如果我尝试用#idOne 替换选择器,即使不是动态的也坏了。我猜typehead(或keyup,就此而言)仅在输入元素上触发?
      • 好吧,我查了一下,似乎只有可聚焦元素(主要是输入(和其他表单元素)和A元素?)触发了“keyup”事件。似乎在我能把所有的东西都用 A 包起来之前,这是不行的?
      猜你喜欢
      相关资源
      最近更新 更多
      热门标签