.on()不适用于生成的元素

问题描述:

AFAICT这应该工作,但它不会。使用jQuery 1.9.0,我有以下几点:.on()不适用于生成的元素

<html> 
    <head> 
     <script type="text/javascript" src="js/libs/jquery-1.9.0/jquery.min.js"></script> 
     <script type="text/javascript"> 

      $(document).ready(function() { 
       $("button").click(function() { 
        $("#area").html("<p>click me</p>"); 
       }); 

       $("p").on("click", function() { 
        alert($(this).text()); 
       }); 
      }); 

     </script> 
    </head> 
    <body> 
     <p>some text</p> 
     <button>Create me</button> 
     <div id="area"></div> 
    </body> 
</html> 

为什么点击“一些文字”把警报,但点击生成的“单击我”呢?我认为.on()的重点是在动态生成的代码上启用事件处理程序。根据Click event doesn't work on dynamically generated elements这应该工作,但它没有。请参阅http://jsfiddle.net/ymUYy/1/

+0

[请阅读jQuery的'。对()'文档,其中代表团清楚的解释(http://api.jquery.com/on/) – Sparky 2013-04-04 01:46:06

.on()不是.live()的替代替代品。您需要使用事件代表团语法:

$('#area').on('click', 'p', function() { 
    ... 
}); 
+4

关于委托知道的重要一点是,您应用'.on()'的元素在您调用时必须存在,第二个参数中指定的元素可以动态添加。 – Barmar 2013-04-04 01:46:12