2011-01-03 13 views
44

Dies ist eine Art ähnliches Duplikat zu einigen anderen hier, aber ich denke, dass ich event.preventDefault() in diesem Fall richtig verwende.jQuery event.preventDefault() funktioniert nicht in Firefox (JSFiddle enthalten)

Hier ist ein JSFiddle Sie den Code mit sehen können: http://jsfiddle.net/SeEw2/2/

Grundsätzlich auf die Schaltfläche Senden klicken.

In Chrome: Nichts passiert - richtige Antwort.

In Firefox: Seite neu geladen, oh nein!

Warum wird die Seite in Firefox und nicht in Chrome neu geladen? Ich habe Firebugging es und keine Fehler kommen in beiden ...

+14

Der Grund, warum dies in Chrome funktioniert, ist, dass Chrome einen Bone an Websites ableitet, die IE-abhängig sind, indem "window.event" mit dem aktuellen Ereignis gefüllt wird, bevor Handler ausgelöst werden.(Und eine kostenlose Referenz wie Ihr 'Ereignis' - weil Sie vergessen haben, es in Ihre Event-Handler-Signatur aufzunehmen, wie [ClemDesm war der Erste, der darauf hinweist] (http://stackoverflow.com/questions/4585970/jquery-event -preventdefault-not-working-in-firefox-jsfiddle-included/4586007 # 4586007) - bedeutet, dass Sie auf 'window.event' zurückfallen.) Firefox wirft keine solchen Bones auf IE-spezifischen Code. –

+0

Sehr informativ, danke T.J. - Ich habe das niemals gewusst. – Jack

+2

Bitte Code in der Frage eingeben, nicht in jsFiddle. –

Antwort

90

Die Variable event in Ihrem Code ist nicht initialisiert.

http://jsfiddle.net/SeEw2/4/

Extrakt:

$('#ajaxsearch').click(function(event) { 

     // Stop the Search input reloading the page by preventing its default action 
     event.preventDefault(); 
+0

Aha! Danke ClemDesm, wie dumm das zu verpassen. Jetzt scheint es gerade in Firebug's Error Console angezeigt zu werden ... hmmm :) – Jack

+7

Ich frage mich, warum es in Chrome funktioniert ... hatte genau das gleiche Problem und das hat es behoben. –

+0

@Shikiryu: Du hast mir den Tag gerettet .... Danke :) – Pankaj

1

Weil Ihr nicht das Ereignisobjekt wie function(event) vorbei, aber meine Frage ist, warum auch alles durchmachen, wenn Sie die type="button" machen und Onclick die Werte übergeben? Im Wesentlichen das, was du mit diesem ganzen Prozess machst.

+0

Hey, warum habe ich nicht daran gedacht ?! Prost! Ich rolle jetzt mit einem 'type =" button "'. Ich benutze 'Onclick' jedoch nicht, da es im größeren Umfang der Dinge einfacher ist, es so zu machen. – Jack

+0

Ich könnte falsch liegen (und es hat keine Beziehung mit der Frage), aber ich frage mich: Ist ein 'type =" button "' _enter_ Tastatur Touch als ein submit zu erkennen? Kann es nicht wirklich auf jsfiddle testen, kann es nicht auf andere Weise testen @ meine Arbeit und ich bin neugierig :) – Shikiryu

+0

Wenn Sie die Eingabetaste mit Fokus auf das Textfeld drücken, tut es das nicht. Drücken Sie Enter mit Fokus (wahrscheinlich Tabbed) auf den Button selbst, ja, es erkennt es als Submit und 'preventDefault()' tritt auf. Meinst Du das? :) – Jack

8

Ah Ich hatte in der Vergangenheit ein ähnliches Problem. Anstatt Event.preventDefault() versuchen, das Ereignis vorbei zu:

function ie8SafePreventEvent(e){ 
    if(e.preventDefault){ e.preventDefault()} 
    else{e.stop()}; 

    e.returnValue = false; 
    e.stopPropagation();   
} 

Ich weiß, es IE sagt, aber ich habe noch nie ein Problem mit ihm, da = hatte]

+0

Netter Trick! Danke für das Teilen :) –

1

Statt für ein Click-Ereignis suchen auf der Schaltfläche senden, warum nicht den $(form).submit Handler verwenden?

Solange Sie am Ende des Handlers 'false' zurückgegeben haben, wird die Seite nicht neu geladen.

+0

Das ist, was ich jetzt benutze, scheint wie ein besserer Weg, es zu tun. Vielen Dank! – Jack

0

Ich löste es auf diese Weise, da mein Code ein bisschen anders ist, kann dies für andere hilfreich sein. Mein ursprünglicher Code sah so aus.

<form id="enrollstudentform" onsubmit="return enrollStudents()"> 
    ... 
</form> 

Meine js Funktion sah aus wie

function enrollStudents() { 
    // Stop Form. 
    event.preventDefault(); 
    // Other code 
} 

ich die Parameter Ereignis in dem Funktionsaufruf übergeben hatte und empfangen sie in der Funktion.

<form id="enrollstudentform" onsubmit="return enrollStudents(event)"> 
    ... 
</form> 

js Code:

function enrollStudents(event) { 
    // Stop Form. 
    event.preventDefault(); 
    // Other code 
} 

Ich hoffe, es hilft.

Verwandte Themen