2009-03-15 3 views
2

Я часто использую ссылки с href='#' при вызове ресурсов ajax.Звуковой щелчок в IE при использовании события jQuery .click() и <a href='#'/>

Я заметил, что при нажатии этих ссылок IE делает звуковой щелчок.

Вот обходной путь:

$("#element") 

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

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

ОДНАКО, когда я пытаюсь инкапсулировать эту функциональность в плагин JQuery, я успешно не возвращая «щелкнул» элемент.

Например, если я использую описанный выше подход, я получу фактический элемент 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.

Возможно, я просто неправильно написал плагин - любые идеи?

Спасибо так много,

Майкл

ответ

2

Наконец получил это работает -

//jQuery.clickless.js 

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

Edit:

Выражается в cobbal и Джулиан (Инициативы Дхармы) - высоко ценится.

+0

Arf, как я мог упустить тот факт, что вы, возможно, использовали «это» в обратном вызове! Рад, что вы решили это :) –

1

попробовать это:

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

     $.each(this, function() { 

     var element = $(this); 

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

    return this; 

    } 
})(jQuery); 
+0

Нет кости - та же проблема. – marclar

+0

Я знаю, это может показаться глупым, но вы уверены, что ваша ссылка, как ее идентификатор, установлен на «элемент» или это просто href? Если это href, используйте «a [href = '# element»] как селектор ... или еще лучше «a [href^=' # ']», чтобы получить все ссылки, о которых идет речь. –

+0

Да - у каждой ссылки есть уникальный идентификатор, такой как «hlList_43». , , Я просто использовал «element» в качестве общего идентификатора в этом коде. – marclar

-4

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

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

+0

... или получить лучший браузер, который не вызывает щелчок. Но, увы, эти «ответы» на самом деле не отвечают на вопрос; [как] его можно отключить с помощью скрипта? –

0

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

.bind("click", fnCallback); 

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

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

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

пошарил внутри JQuery-х each(), чтобы узнать, что он использовал

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

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

Если вы попробуете, вы увидите, что это не сработает. – marclar

+0

правда, на самом деле попробовал это на этот раз. – cobbal

+0

Ну, в этом коде «fnCallback» не существует. Кроме того, он не обрабатывает шум «щелчка». Но вы правы - функция .apply() полезна; Спасибо. – marclar