Звуковой «щелчок» в IE при использовании события jQuery .click () и <a href='#'/> - PullRequest
2 голосов
/ 15 марта 2009

Я часто использую ссылки с href='#' при вызове ресурсов ajax.

Я заметил, что 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.

Может я просто неправильно пишу плагин - есть идеи?

Большое спасибо,

Michael

Ответы [ 4 ]

2 голосов
/ 15 марта 2009

Наконец-то все заработало -

//jQuery.clickless.js

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

Редактировать:

Благодарю Коббала и Джулиана (из Инициативы Дхармы) - высоко ценится.

1 голос
/ 15 марта 2009

попробуйте это:

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

      $.each(this, function() {

        var element = $(this);

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

     return this;

   }
})(jQuery);
0 голосов
/ 15 марта 2009

почему бы просто не использовать:

.bind("click", fnCallback);

, так как this будет правильно установлено.

Редактировать : эта версия действительно работает:

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

ковырялся в jQuery each(), чтобы узнать, что он использовал

Больше править:
если посмотреть на различия между apply() и call(), это может быть более правильным способом сделать это.

.bind("click", function(){
    fnCallback.call(this);
});
0 голосов
/ 15 марта 2009

В качестве альтернативы вам нужно будет посоветовать своим пользователям, как войти в панель управления, звуки и отключить звуки для начала / конца навигации.

Я лично ненавижу эти шумы при щелчке, поэтому это первое, что я отключаю при установке Windows.

...