1

有一段时间让我感到不安,jQuery API 说:

As of jQuery 1.7, the .live() method is deprecated. Use .on() to attach event handlers.

当我尝试在我的小部件管理端(小部件类的 form() 操作)中添加一些 jquery 内容时,我很惊讶不能使用 on(),而是使用 live() 来完成这项工作。

所以这是我的问题:为什么以及我误解了什么?

问候,当然,谢谢你的时间。

ps 我不喜欢使用 >= 1.7 版本。

编辑:

<?php
    class Test_Slider_Widget extends WP_Widget 
        { 
            public function form( $instance ) { 
                ?>
             <span id="test">Test</span>
             <script> 
             jQuery(document).ready(function($) {
                 /* $('#test').on('click', function { //doesn't work
                     alert('test'); 
                 }); */
                 $('#test').live('click', function { //work
                     alert('test');
                 });

             });
             </script>


 <?php }

编辑 2:好的,总是使用 $this->get_field_id('id-text') 来拥有一个唯一的 ID,否则 id 将在 wordpress 管理中由于小部件重复代码而重复。感谢Xec给我指路 :)

4

1 回答 1

1

不推荐使用的.live()方法绑定到document,并且在每次单击时都会#test在调用处理程序之前检查选择器是否匹配。如果您想要这种行为,.on()您可以使用委托语法

查看http://api.jquery.com/on/#direct-and-delegated-events了解更多详细信息。

对于快速修复,您可以使用以下内容模仿您的.live()代码:

$(document).on('click', '#test', function () {
    alert('test');
});

要获得更高效的代码,您将替换document为匹配的静态祖先的选择器#test

希望这可以帮助!

编辑:

从您的“编辑 2”中,我意识到您的问题是重复的 ID,但我会将这个答案留在这里以供后代使用。

于 2012-12-21T12:02:42.467 回答