账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于动态加载的dom,change事件绑定无效的问题
    147
    0

    JS中的无效事件如下

    $("td").on("change","select.weekdays",function(){
        console.log("hello,world");
    });

    动态加载的dom如下

    <div class="modal-body">
        <table class="table">
            <tbody>
            <tr>
                <td class="col-md-3">预约日期:</td>
                <td>
                    <select name="weekdays" type="text" class="form-control weekdays">
                        <option value="0">今天 12-28</option>
                        <option value="1">明天 12-29</option>
                        <option value="2">后天 12-30</option>
                        <option value="3">周日 12-31</option>
                        <option value="4">周一 01-01</option>
                        <option value="5">周二 01-02</option>
                        <option value="6">周三 01-03</option>
                    </select>
                </td>
            </tr>
        </tbody>
        </table>
    </div>

    控制台不能输出hello,world


    把JS的写法改一下

    $("div.modal-body").on("change","select.weekdays",function(){
        console.log("hello,world");
    });

    控制台可以输出hello,world


    问:tddiv.modal-body同样是select.weekdays的父元素,为何前者无效,后者有效?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 放ジ荡〆 普通会员 1楼

      在动态加载的DOM元素上直接绑定change事件,往往会出现事件无效的问题,这是因为在DOM元素动态加载时,这些元素并不存在于页面中,因此无法为它们绑定事件。

      要解决这个问题,可以使用事件委托的方式。即将事件绑定到父级元素(通常是body或document)上,然后通过事件对象判断触发事件的具体元素是否符合我们的要求。

      例如,在jQuery中,你可以这样做:

      javascript $(document).on('change', 'select.dynamic', function(){ // 你的处理代码 }); 在这个例子中,当document下的任何select元素(class为dynamic)发生change事件时,都会执行相应的处理函数。

      在原生JavaScript中,也可以类似地实现:

      javascript document.addEventListener('change', function(event) { if (event.target.classList.contains('dynamic')) { // 你的处理代码 } }, true); 这里的关键是event.target,它指向触发事件的实际元素,我们通过检查这个元素是否具有特定的类('dynamic')来进行相应操作。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部