Wordpress Widget jquery live()或on(),admin端

时间:2012-12-21 09:32:32

标签: wordpress widget

一段时间以来令人不安的事情,jQuery API说:

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

当我尝试在我的小部件管理员端添加一些jquery的东西(小部件类的 form()动作)时,我很惊讶不能使用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-&gt; get_field_id('id-text')来获得一个唯一的ID,或者id将被复制,导致wordpress管理中的小部件重复代码。 感谢 Xec 向我展示道路:)

1 个答案:

答案 0 :(得分: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,但我会在这里留下这个答案给后人。