jQuery on()方法绑定动态元素的点击事件无效

之前就一直受这个问题的困扰,在jQuery1.7版本之后添加了on方法,之前就了解过,其优越性高于live(),bind(),delegate()等方法,在此之前项目中想用这个来测试结果发现,居然动态生成的标签点击了没反应,而live方法却能够支持,于是乎到处查资料,问网友,结果找了好久在一篇文章中终于找到了答案。。。

jQuery 使用on绑定动态生成的元素时,不能直接用该对象操作,而是选择其非动态生成的父节点然后再找到本身才能达到效果。大家看看源码就知道了。生成的按钮基数项on方法点击无效live方法有效。

比如页面上有下边两个元素:

<input type="button" name="addbtn" value="按钮添加" />
<div id="test"></div>

使用下边的jQuery代码大家可以对比看看区别:

$(function () {
    var a = 1,
    $_div = $(‘#test‘);
    $(‘input[name=addbtn]‘).on(‘click‘, function () {
        $_div.append(‘<input type="button" name="test‘ + a + ‘" value="按钮‘ + a + ‘"/>‘);
        a++;
    });

    //偶数项点击事件
    $_div.on(‘click‘, ‘input[name^=test]:even‘, function () {
        alert(‘我是有效的on方法,你能看见我吗:‘ + this.value);
    });

    //奇数项绑定的点击事件  发现点击无效,而是用live方法却能够支持
    $(‘input[name^=test]:odd‘).on(‘click‘, function () {
        alert(‘我是无效的on方法,你不能看见我‘);
    });

    //奇数项绑定的点击事件  发现点击无效,而是用live方法却能够支持
    $(‘input[name^=test]:odd‘).live(‘click‘, function () {
        alert(‘我是live方法,你能看见我吗:‘ + this.value);
    });
});

代码简单,就不演示了。

时间: 2024-08-11 05:50:52

jQuery on()方法绑定动态元素的点击事件无效的相关文章

jQuery on()方法绑定动态元素的点击事件无响应的解决办法

$('#check_all').on('click' , function(){ alert(1); }); $("#yujinlist").append(html); count++; } 以上代码执行时,点击#check_all时,alert一直没反应,后在网上查资料时,才知道on前面的元素也必须在页面加载的时候就存在于dom里面, 那原话是这样的: 支持给动态元素和属性绑定事件的是live和on,其中live在JQUERY 1.7之后就不推荐使用了.现在主要用on,使用on的时候

jQuery on()方法绑定动态元素的点击事件

之前就一直受这个问题的困扰,在jQuery1.7版本之后添加了on方法,之前就了解过,其优越性高于live(),bind(),delegate()等方法,在此之前项目中想用这个来测试结果发现,居然动态生成的标签点击了没反应,而live方法却能够支持,于是乎到处查资料,问网友,结果找了好久在一篇文章中终于找到了答案... jQuery 使用on绑定动态生成的元素时,不能直接用该对象操作,而是选择其非动态生成的父节点然后再找到本身才能达到效果.大家看看源码就知道了.生成的按钮基数项on方法点击无效l

on()方法绑定动态元素的点击事件无响应

on前面的元素也必须在页面加载的时候就存在于dom里面 支持给动态元素和属性绑定事件的是live和on,其中live在JQUERY 1.8之后就不推荐使用了.现在主要用on,使用on的时候也要注意,on前面的元素也必须在页面加载的时候就存在于dom里面.动态的元素或者样式等,可以放在on的第二个参数里面. <script> $(function(){ $(".col-sm-10 .infor_data").on("click",".infor_

jquery on方法 绑定动态元素 出现的问题

之前使用 on 的时候一直是 $("").on('click','function(){  }') 之后发现有些时候一直无法绑定(比如元素动态生成时),查看文档后发现正确用法应该是 $(document).on("change","#pageSize_out",function(){ if($("#page_out").val()!=0){ $("#pageSize").val($(this).val())

JS动态append之后点击事件无效

今天做项目用了append向HTML里面添加结构代码,代码添加之后,单击事件就没反应了.搞得我一脸懵逼,调了代码很久实在不行,我百度了一下才发现,append添加的节点单击事件是不会生效的. 原因: 原来append中的节点是在整个文档加载后才添加的,页面并不会为未来的元素初始化添加点击事件,所以使用这种方式动态添加的节点中的点击事件不会生效. 解决方法: 于是我只好改用事件代理来完成这次我的项目,把这次经历发在上面存一下档了,希望下次能记住. HTML代码: <main class="c

jquery无法为动态生成的元素添加点击事件的解决方法

遇到 jquery无法为动态生成的元素添加点击事件,谷歌一下,整理一下解决方法如下: (<li>中间的元素是动态生成的), 现在想为<i>添加点击事件, 例子如下: <div> <ul> <li> <span> <i class='icon'>这是元素内容</i> //i是动态生成 </span> </li> </ul> </div> 解决方法如下: $(docu

jquery data方法获取某个元素上事件

获取某个元素上的事件,jquery的给元素绑定的事件可以用data方法取出来. 通过$(element).data("events")来获取 // 比如给一个button绑定两个click事件 $("button").click(function() { alert("1") }); $("button").click(function() { alert("2") }); // 这个时候点击该button

关于jQuery中动态生成的点击事件触发两次的讨论

由于是动态生成的  点击事件运用了jQuery里面的on()方法,绑定在body上面,结果在程序里面运行了两次.参考了博客 利用on和off方法编写高效的js代码知道了很多在dom对象删除以后,其声明的绑定在window上的事件还一直存在,导致相同的功能代码执行了几次.故使用之前要清理掉body上绑定的click事件,利用了jQuery里面off()方法. $('body').off('click').on('click','selector',function(){});

jquery datables ajax分页后的点击事件无效是怎么回事

异步请求数据后,动态向table中追加行,行点击事件失效 动态加入到DOM中的对象无法继承原有的事件,所以无效,举例: // $.ajax... ajax部分省略 var tr = ""; if(data.length){     for(var i=0; i<data.length; i++){         tr = '<tr>';         tr += '<td>' + data.status == 0 ? "正常" :