首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的jquery (‘.on’)不适用于动态添加的selects

为什么我的jquery (‘.on’)不适用于动态添加的selects
EN

Stack Overflow用户
提问于 2013-02-19 01:33:00
回答 10查看 68.7K关注 0票数 22

我正在动态添加select元素,如下面的HTML所示。我不确定为什么.on('change‘...)不适用于动态选择。我遗漏了什么?

我使用的是Chrome 24.0.1312.57 + jquery 1.8.3。

代码语言:javascript
运行
复制
<script type="text/javascript">
  $(document).ready(function() {
      $('#x select').on('change', function () { alert('helo'); })
      $('#y select').on('change', function () { alert('helo'); })

      $('#x').html($('#y').html());
  });
</script>

<div id="x"></div>
<div id="y">
    <select>
        <option>O1</option>
        <option>O2</option>
    </select>
</div>
EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2013-02-19 01:41:30

你的代码:

代码语言:javascript
运行
复制
$('#x select').on('change', function () { alert('helo'); })

将事件处理程序附加到#x元素内的select。

你想要的东西(根据我的理解)是这样的:

代码语言:javascript
运行
复制
$("#y").on('change','select',function () { alert('helo'); });

这会将一个事件处理程序附加到委托给其子“select”元素的#y元素

来自http://api.jquery.com/on/

.on()方法将事件处理程序附加到jQuery对象中当前选定的元素集。

票数 39
EN

Stack Overflow用户

发布于 2013-02-19 01:38:42

在初始页面加载时,对不在DOM中的元素的事件绑定将不起作用。您需要绑定到DOM中更靠上的元素,以允许事件向下渗透。这通常是我采取的方法:

代码语言:javascript
运行
复制
$(document).on({
  change: function() {
    alert('helo');
  }
}, '#x select');

$(document).on({
  change: function() {
    alert('helo');
  }
}, '#y select');

我更喜欢它,因为你可以很容易地添加后续事件。

代码语言:javascript
运行
复制
$(document).on({
  change: function() {
    alert('helo');
  },
  blur: function() {
    alert('helo');
  }
}, '#x select');
票数 14
EN

Stack Overflow用户

发布于 2017-03-14 14:48:08

不过,不要使用.live()/.bind()/.delegate(),。您应该使用.on()

对于静态和动态选择更改

代码语言:javascript
运行
复制
$(document).on('change', 'select', function (e) {
    // do something 
});
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14942048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档