Click事件在jQuery插件中无法正常工作

Fri*_*ias 5 javascript jquery click jquery-plugins

我正在写一个jQuery插件,但我遇到了一个问题:

我的HTML元素

<a id="trac"></a>
Run Code Online (Sandbox Code Playgroud)

我的JS调用插件

$('#trac').myplugin();
Run Code Online (Sandbox Code Playgroud)

我的插件

$.fn.myplugin = function(){
    var $root;
    return this.each(function(){
        $root = $(this);
        $root.live('click',function(){
            console.log('here');
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

碰巧"这里"永远不会显示.但如果我用...

 $('#trac').live('click',function(){
     console.log('here');
 });
Run Code Online (Sandbox Code Playgroud)

...显示"此处".我不明白为什么会发生这种情况,因为$ root和$('#trac')是完全相同的jQuery对象.

我该如何解决?

谢谢!

Poi*_*nty 8

".live()"函数需要一个选择器,在你的插件中你不会给它一个.您构建的jQuery对象($(this))是一个有效的对象,但不涉及选择器字符串.

你可以直接绑定处理程序:

  $root.click(function() { ... });
Run Code Online (Sandbox Code Playgroud)

详细说明:你说,"因为$ root和$('#trac')是完全一样的." 问题是,事实并非如此.使用选择器字符串构建jQuery对象时,该对象会保留该选择器字符串.从"$(this)"构建"$ root"时没有字符串.".live()"函数通过在<body>元素上创建处理程序然后测试针对该选择器冒泡的每个事件的目标来进行操作.