【问题标题】:Events on dynamically added classes动态添加的类上的事件
【发布时间】:2013-08-21 19:47:59
【问题描述】:

我有一个表单,其中按钮的类是动态变化的,具体取决于请求的来源。我正在尝试捕获 onclick 事件,但它不包含动态添加的类。我确保该类被添加到按钮中。我哪里出错了。

片段 --

   $('.button').removeClass('oldClass');
   $('.button').addClass('newClass');

   <button class = "button">Button</button>

点击--

     $('.newClass').click(function(){
          alert("test");
     });

虽然按钮类已更改为 newClass,但代码未到达此事件事件。

谢谢

【问题讨论】:

  • 您选择元素,并将处理程序绑定到匹配的元素。如果元素在选择时没有该类,则不会被选中,因此不会绑定处理程序。
  • JQuery 在 DOM 对象加载时应用点击功能(当您第一次刷新页面时)。由于此时按钮没有新类,因此它永远不会为其设置点击功能。
  • 在示例中,我将事件绑定到 newClass 名称..
  • @Fox:我再说一遍。您正在根据类选择元素。如果元素在选择时没有该类,则不会被选中,因此不会绑定处理程序。
  • 你是如何动态添加元素的?

标签: javascript jquery events onclick


【解决方案1】:

那是因为当你绑定点击事件时,元素有另一个类。

试试这样的:

$('body').on('click', '.newClass', function () {
        alert('test');
    });

Example

【讨论】:

    【解决方案2】:

    通过.bind 之类的方法(或.click 之类的快捷方式)设置事件处理程序仅适用于当前匹配选择器的元素。如果你想为当前匹配的元素以及所有未来匹配的元素设置事件处理程序,那么你应该使用.on

    【讨论】:

      【解决方案3】:

      您可以尝试在 DOM 加载时直接向按钮添加点击功能,只需使用 .hasClass() 来检查是否已应用 newClass。

      $('.button').click(function() {
          if($(this).hasClass('newClass')) {
              //Code for new class click
              alert('test');
          }
      });
      

      JSFiddle:http://jsfiddle.net/yRySK/1/

      【讨论】:

        【解决方案4】:

        我使用 JQuery 提供的委托方法解决了这个问题。

        $('body').delegate('.newClass','click', delegatefunction);
        
        function hasClass() {
           alert("Hello!!");
        }
        

        感谢您的帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-05-06
          • 2013-07-07
          • 2011-10-20
          • 2017-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多