jQuery 事件绑定不生效如何解决
沉沙 2018-05-28 来源 : 阅读 1692 评论 0

摘要:一般而言,JQuery事件绑定不生效,是一些新手经常遇到的问题,其实都是简单的问题,大概分两种情况。 希望阅读本篇文章以后大家有所收获,加深大家对jQuery的理解。

一般而言,JQuery事件绑定不生效,是一些新手经常遇到的问题,其实都是简单的问题,大概分两种情况。 先上代码,以下两个button的事件绑定都不生效。

<html><head>
  <script src="../libs/jquery.js"></script>
  <script type="text/javascript">
      $("#button1").click(function () {
          alert("button1 clicked");
      });
 
      $(function(){
          var div = $("<div><button id = 'button2'>button2</button></div>");
          var body = $(document.body);
          body.append(div);
          div.find("#button2").click(function () {
               alert("button2 clicked");
            });
          div.remove();
          body.append(div);    
         })
      
  </script></head><body><div>
  <button id = "button1">button1</button></div></body></html>

下面讲述原理:

绑定事件在未加载完成之前

首先看button1的事件绑定,

$("#button1").click(function () {
          alert("button1 clicked");
      });

button1在未加载完成之前,通过$("#button1").click方法来进行事件绑定,由于此时未加载完成,实际上$("#button1")是一个空数组,所以最终的结果是未对任何元素进行事件绑定。 那么如何解决这个问题呢,其实这个问题本不应该发生,一般新手比较容易出问题,解决的方式很简单,把事件绑定放在加载完成之后,JQuery的做法是:

$(function(){
$("#button1").click(function () {
          alert("button1 clicked");
      });
})

绑定事件后移除了元素重新加入

再看button2,button2首先通过JQuery 的方法被创建出来,然后被加入到body中,然后绑定事件,之后从body中移除,然后在加入body中:

var div = $("<div><button id = 'button2'>button2</button></div>");
          var body = $(document.body);          body.append(div);          div.find("#button2").click(function () {
               alert("button2 clicked");
            });
          div.remove();          body.append(div);    
         })

此时点击也不会生效,这是因为,在从文档中移除的时候,JQuery 会自动把绑定的事件移除掉了,然后在加入的时候,事件绑定已经不存在了;这种情况应该如何解决呢? 一般来说,如果某些元素存在频繁的添加 移除 在添加的操作,可以考虑delegate的方式,比如:

 var div = $("<div><button id = 'button2'>button2</button></div>");
          var body = $(document.body);
          body.delegate('#button2','click',function(){
              alert("button2 clicked");
          });
          body.append(div);
          // div.find("#button2").click(function () {
          //      alert("button2 clicked");
       //      });
          div.remove();
          body.append(div);

总结

最终正确的代码如下:

<html><head>

 <script src="../libs/jquery.js"></script>

 <script type="text/javascript">

     $(function(){

        $("#button1").click(function () {

         alert("button1 clicked");

          });

         var div = $("<div><button id = 'button2'>button2</button></div>");

         var body = $(document.body);

         body.delegate('#button2','click',function(){

             alert("button2 clicked");

         });

         body.append(div);

         div.remove();

         body.append(div);    

        })

     

 </script></head><body><div>

 <button id = "button1">button1</button></div></body></html>

 

本文由职坐标整理并发布,了解更多内容,请关注职坐标WEB前端jQuery频道!


本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 2 不喜欢 | 0
看完这篇文章有何感觉?已经有2人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程