使用jQuery .click()事件和<a href="#"></a>时,在IE中听到'click'

时间:2009-03-15 18:09:08

标签: jquery plugins click

在调用ajax资源时,我经常使用href='#'的链接。

我注意到IE在点击这些链接时会发出“点击”声。

这是一种解决方法:

$("#element")

.click(function(){return false;})

.bind("click", function(){ alert(this); });

但是,当我尝试将此功能封装在jQuery插件中时,我没有成功返回“clicked”元素。

例如,如果我使用上面的方法,我将获得被点击的实际A元素。

但如果我写一个这样的插件:

(function($){
    $.fn.clickless = function(fnCallback) {

        return this
            .click(function(){return false;})
            .bind("click", function(){
                fnCallback.call();
            });

    }
})(jQuery);

然后致电

$("#element").clickless(function(){
alert(this);
});

我会得到Window对象,当我试图找到实际的A标签时,它没有用。

也许我只是错误地编写插件 - 任何想法?

非常感谢,

迈克尔

4 个答案:

答案 0 :(得分:2)

终于搞定了 -

//jQuery.clickless.js

(function($){    
    $.fn.clickless = function(fnCallback) {        
        return this
                .click(function(){return false;})                
                .bind("click", function(){                        
                    fnCallback.apply(this);                
                });    
           }}
)(jQuery);

修改:

感谢cobbal和朱利安(达摩倡议) - 非常感谢。

答案 1 :(得分:1)

试试这个:

(function($){
    $.fn.clickless = function(fnCallback) {

      $.each(this, function() {

        var element = $(this);

        element.click(function(){return false;})
               .bind("click", function(){
                    fnCallback();
               });
     });

     return this;

   }
})(jQuery);

答案 2 :(得分:0)

为什么不直接使用:

.bind("click", fnCallback);

因为this已正确设置。

修改:此版本确实有效:

.bind("click", function(){
    fnCallback.apply(this);
});

在jQuery的each()内找到了它的用途

更多编辑
在查看apply()call()的不同之处时,这可能是更正确的方法。

.bind("click", function(){
    fnCallback.call(this);
});

答案 3 :(得分:-4)

或者,您需要告知用户如何进入控制面板,声音以及关闭开始/结束导航的声音。

我个人讨厌这些点击声,所以这是我在Windows安装时关闭的第一件事。