首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击事件在jQuery插件中无法正常工作

单击事件在jQuery插件中无法正常工作
EN

Stack Overflow用户
提问于 2011-06-20 20:43:50
回答 2查看 1.2K关注 0票数 5

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

我的HTML元素

代码语言:javascript
复制
<a id="trac"></a>

调用插件的JS

代码语言:javascript
复制
$('#trac').myplugin();

我的插件

代码语言:javascript
复制
$.fn.myplugin = function(){
    var $root;
    return this.each(function(){
        $root = $(this);
        $root.live('click',function(){
            console.log('here');
        });
    });
}

碰巧"here“永远不会显示。但如果我用..。

代码语言:javascript
复制
 $('#trac').live('click',function(){
     console.log('here');
 });

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

我怎么才能修复它?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-20 20:48:42

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

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

代码语言:javascript
复制
  $root.click(function() { ... });

更详细地说:你会说,"...因为$root和$('#trac')是完全一样的。“问题是,这并不是真的。当您使用选择器字符串构建jQuery对象时,该对象会保留该选择器字符串。从“$($root)”构建“this”时,没有字符串。".live()“函数的操作方式是在<body>元素上创建一个处理程序,然后测试针对该选择器出现的每个事件的目标。

票数 8
EN

Stack Overflow用户

发布于 2011-06-20 21:26:55

我喜欢另一个答案,因为它是对这个问题的“直接”回答,但为了展示你为其他人做的事情的一些替代方案,我认为你可以将这个插件简化为:

代码语言:javascript
复制
<div id="mystuff">hi</div>
<div id='answer'>empty</div>

$.fn.myplugin = function() {
    this.live('click', function() {
        $('#answer').text('here');
    });
}
$('#mystuff').myplugin();

如下例所示:http://jsfiddle.net/FgUEB/,因此" this“获得选择器,然后你可以附加"live click”--没有.each的复杂性--如果你这样做(当然是用固定的选择器),它会多次将事件放在元素上,如果有几次的话-这是你在例子中的.each所暗示的。

代码语言:javascript
复制
jQuery.fn.newMethod = function(){
    return this.each(function(){
        alert(typeof this);
    });
};

内部函数(在警报中)中的引用this关键字引用当前的HTML元素。因为它不是jQuery对象,所以它不能访问jQuery方法(不过,您可以将它包装在jQuery对象中,以将这些方法作为jQuery(this)返回。

代码语言:javascript
复制
jQuery.fn.newMethod = function(){
    return this.each(function(){
        jQuery(this).css({'background-color':'red'});//each inner element
    });
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6411326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档