2009-03-15 7 views
2

Ich verwende oft Links mit beim Aufruf von AJAX-Ressourcen.Audible "Klick" in IE bei Verwendung der jQuery .click() Ereignis und <a href='#'/>

Ich habe festgestellt, dass der IE beim Klicken auf diese Links einen hörbaren "Klick" macht.

Hier ist eine Abhilfe:

$("#element") 

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

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

Allerdings, wenn ich versuche, diese Funktionalität in einer jQuery-Plugin zu verkapseln, ich bin nicht erfolgreich Rückkehr des Element „geklickt“.

Zum Beispiel, wenn ich den Ansatz oben verwende, bekomme ich das tatsächliche A-Element, das angeklickt wurde.

Aber wenn ich ein Plugin wie folgt schreiben:

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

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

    } 
})(jQuery); 

Und dann rufen Sie

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

Ich werde das Window Objekt erhalten, das hilft nicht, wenn ich zu finden bin versucht, das tatsächliche A-Tag.

Vielleicht schreibe ich gerade das Plugin falsch - irgendwelche Ideen?

Vielen Dank,

Michael

Antwort

2

Schließlich habe es funktioniert -

//jQuery.clickless.js 

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

Edit:

Dank (der Dharma Initiative) cobbal und Julian gehen - sehr geschätzt.

+0

Arf, wie hätte ich die Tatsache übersehen können, dass du "dieses" im Callback benutzt hast? Freut mich, dass du das gelöst hast :) –

1

try this:

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

     $.each(this, function() { 

     var element = $(this); 

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

    return this; 

    } 
})(jQuery); 
+0

Kein Würfel - dasselbe Problem. – marclar

+0

Ich weiß, das klingt vielleicht blöd, aber bist du sicher, dass dein Link auf "element" gesetzt ist oder ist es nur href? Wenn es der href ist, verwende "a [href = '# element']" als Selektor ... oder besser noch "a [href^= '#']", um alle fraglichen Links zu erhalten. –

+0

Ja - jeder Link hat eine eindeutige ID wie "hlList_43". . . Ich habe nur "Element" als generische ID in diesem Code verwendet. – marclar

-4

Alternativ müssen Sie Ihre Benutzer beraten, wie in der Systemsteuerung gehen, Sounds und ausschalten die Sounds für die Start-/End-Navigation.

Ich persönlich hasse diese Klickgeräusche, also ist es das erste, was ich bei einer Windows-Installation abstelle.

+0

... oder einen besseren Browser bekommen, der das Klickgeräusch nicht macht. Aber leider beantworten diese "Antworten" die Frage nicht wirklich; [Wie] kann es mit einem Skript deaktiviert werden? –

0

warum verwenden nicht nur:

.bind("click", fnCallback); 

wie this richtig eingestellt haben.

bearbeiten: Diese Version funktioniert tatsächlich:

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

stocherte innen jQuery each(), um herauszufinden, was es früher

Mehr edit:
auf der Suche, wie apply() und call() unterscheiden , dies könnte der richtige Weg sein, dies zu tun.

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

Wenn Sie es versuchen, werden Sie sehen, dass das nicht funktioniert. – marclar

+0

wahr, tatsächlich versuchte es diesmal. – cobbal

+0

Nun, in diesem Code existiert "fnCallback" nicht. Es behandelt auch nicht das "Klick" -Rauschen. Aber du hast recht - die .apply() Funktion ist nützlich; Danke. – marclar