Click事件不适用于动态添加的按钮

我反对在jQuery中创建div元素并使用javascript创建div元素。 但是,当我动态添加一个按钮元素时,单击不起作用。 我们需要做些什么才能使按钮点击工作?

注意:由于绑定到嵌套在Dom中的多个视图模型中提到的kendo控件需求,我们无法将该功能移到document.ready之外

更新的参考

  • 使用jQuery on()连接点击事件不会通过Ajax调用触发注入的HTML
  • 如何为新注入的html添加jquery事件处理程序?
  • 在通过jquery注入html之后,事件处理程序不能使用/不使用委托
  • <head>
    
        <title>Test</title>
        <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
        <script src="http://cdn.kendostatic.com/2013.2.716/js/kendo.all.min.js"></script>
    
    
    
    <script type="text/javascript">
    
        //lijo
        $(document).ready(function () 
        {
    
        $(".statiscDIV").append('<div>FIRST</div>');
          $(".statiscDIV").append('<div>hello <button class="MakeHoldDetailLinkButton" onclick = "showMakeAndHold();">View</button>  </div>');
    
    
        //lijo
        function showMakeAndHold() 
        {
    
            alert("HIIIIIII");
    
        }
    
    
        });
    
     </script>
    
    </head>
    
    <body>
    
     <div class="statiscDIV">
    
    A
    
     </div>
    
    </body>
    

    当您向DOM注入代码时,jQuery事件处理程序不会附加/绑定到新元素。 (在注入新代码之前,jQuery已经完成了与DOM元素的绑定)。 因此,当你点击一个按钮时,没有jQuery点击事件被困住。

    要附加事件处理程序(从而抓取事件)注入的元素,您必须使用jQuery .on() ,如下所示:

    jsFiddle演示

    $(".statiscDIV").append('<div>FIRST</div>');
    $(".statiscDIV").append('<div>hello <button class="MakeHoldDetailLinkButton">View</button>  </div>');
    
    $(document).on('click','.MakeHoldDetailLinkButton',function(){
        showMakeAndHold();    
    });
    
    function showMakeAndHold() {
    
        alert("HIIIIIII");
    
    }
    

    .on()方法在jQuery 1.7中添加以替代bind() .delegate().live() - 它与所有这些方法都做同样的事情。 (要从任何DOM元素中解除事件处理程序的绑定,请使用.off()

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


    你必须用避开你的引号,或者混合使用单引号和双引号:

    "<div>hello <button class="MakeHoldDetailLinkButton" onclick="showMakeAndHold();">View</button>  </div>"
    '<div>hello <button class='MakeHoldDetailLinkButton' onclick='showMakeAndHold();'>View</button>  </div>'
    '<div>hello <button class="MakeHoldDetailLinkButton" onclick="showMakeAndHold();">View</button>  </div>'
    "<div>hello <button class='MakeHoldDetailLinkButton' onclick='showMakeAndHold();'>View</button>  </div>"
    

    另一个问题是您使用内联事件侦听器。 那些运行在全局上下文中,所以不能运行在闭包中声明的函数。

    要么使showMakeAndHold成为全局函数,要么更好地添加事件侦听器:

    $(".statiscDIV")
        .append('<div>FIRST</div>')
        .append('<div>hello <button class="MakeHoldDetailLinkButton">View</button></div>')
        .find('button').on('click', showMakeAndHold);
    

    演示


     $(document).ready(function (){
        $(".statiscDIV").append('<div>FIRST</div>');
          $(".statiscDIV").append('<div>hello <button class="MakeHoldDetailLinkButton" onclick = "showMakeAndHold();">View</button>  </div>');
    
    });
    //lijo
    function showMakeAndHold(){
        alert("HIIIIIII");
    
    }
    
    链接地址: http://www.djcxy.com/p/83361.html

    上一篇: Click event is not working for dynamically added button

    下一篇: how to print entire HTML element in JavaScript?