Oto mój kod JavaScript (mootools):
$('orderNowForm').addEvent('submit', function (event) {
event.preventDefault();
allFilled = false;
$$(".required").each(function (inp) {
if (inp.getValue() != '') {
allFilled = true;
}
});
if (!allFilled) {
$$(".errormsg").setStyle('display', '');
return;
} else {
$$('.defaultText').each(function (input) {
if (input.getValue() == input.getAttribute('title')) {
input.setAttribute('value', '');
}
});
}
this.send({
onSuccess: function () {
$('page_1_table').setStyle('display', 'none');
$('page_2_table').setStyle('display', 'none');
$('page_3_table').setStyle('display', '');
}
});
});
We wszystkich przeglądarkach oprócz IE działa to dobrze. Ale w IE powoduje to błąd. Mam IE8, więc podczas korzystania z jego debugera JavaScript dowiedziałem się, że event
obiekt nie ma preventDefault
metody powodującej błąd, więc formularz jest przesyłany. Ta metoda jest obsługiwana w przypadku przeglądarki Firefox (którą dowiedziałem się za pomocą Firebug).
Jakaś pomoc?
Odpowiedzi:
w IE możesz użyć
aby osiągnąć ten sam wynik.
Aby nie wyświetlać błędu, możesz przetestować obecność funkcji preventDefault:
Możesz połączyć te dwa z:
źródło
event.preventDefault ? event.preventDefault() : event.returnValue = false;
event.preventDefault();
z jakiegoś powodu przestałem dla mnie pracować w FireFoxie. Użyłem kodu moralności i działało świetnie. Dzięki ~$('.something').click(function(e){ e.preventDefault ? e.preventDefault() : event.returnValue = false; });
Jeśli powiązasz zdarzenie za pomocą funkcji addEvent mootools, program obsługi zdarzeń otrzyma naprawione (rozszerzone) zdarzenie przekazane jako parametr. Zawsze będzie zawierał metodę preventDefault ().
Wypróbuj to skrzypce, aby zobaczyć różnicę w wiązaniu zdarzeń. http://jsfiddle.net/pFqrY/8/
Dla wszystkich użytkowników jQuery możesz naprawić zdarzenie w razie potrzeby. Powiedzmy, że użyłeś HTML onclick = ".." i otrzymujesz zdarzenie specyficzne dla IE, w którym brakuje funkcji preventDefault (), po prostu użyj tego kodu, aby go uzyskać.
Następnie e.preventDefault (); działa w porządku.
źródło
Wiem, że to dość stary post, ale spędziłem trochę czasu próbując sprawić, by działało w IE8.
Wygląda na to, że istnieją pewne różnice w wersjach IE8, ponieważ rozwiązania zamieszczone tutaj i w innych wątkach nie działały dla mnie.
Powiedzmy, że mamy ten kod:
W mojej
preventDefault()
metodzie IE8 istnieje z powodu jQuery, ale nie działa (prawdopodobnie z powodu punktu poniżej), więc to się nie powiedzie.Nawet jeśli ustawię
returnValue
właściwość bezpośrednio na false:To też nie zadziała, ponieważ właśnie ustawiłem właściwość niestandardowego obiektu zdarzenia jQuery.
Jedynym rozwiązaniem, które pracuje dla mnie jest, aby ustawić właściwość
returnValue
o zmiennej globalnejevent
tak:Aby ułatwić komuś, kto spróbuje przekonać IE8 do działania. Mam nadzieję, że IE8 wkrótce umrze okropnie w bolesnej śmierci.
AKTUALIZACJA:
Jak wskazuje sv_in , można użyć,
event.originalEvent
aby uzyskać oryginalny obiekt zdarzenia i ustawićreturnValue
właściwość w oryginalnym. Ale nie przetestowałem go jeszcze w moim IE8.źródło
event.originalEvent
. Więcej informacji: stackoverflow.com/a/16675056/22550Mootools redefiniuje funkcję zapobieganiaDefault w obiektach zdarzeń. Twój kod powinien więc dobrze działać w każdej przeglądarce. Jeśli nie, oznacza to problem ze wsparciem ie8 w mootools.
Czy przetestowałeś swój kod na ie6 i / lub ie7?
Doktor mówi
ale w przeciwnym razie możesz spróbować
źródło
Testowane na IE 9 i Chrome.
źródło
Aby wyłączyć klawisz klawiatury po IE9, użyj:
e.preventDefault();
Aby wyłączyć zwykły klawisz klawiatury w IE7 / 8, użyj:
e.returnValue = false;
lubreturn false;
Jeśli spróbujesz wyłączyć skrót klawiaturowy (za pomocą Ctrl itp.
Ctrl+F
), Musisz dodać te linie:Oto pełny przykład tylko dla IE7 / 8:
Odwołanie: Jak wyłączyć skróty klawiaturowe w IE7 / IE8
źródło
Oto funkcja, którą testowałem przy użyciu jquery 1.3.2 i nocnej wersji 09-18-2009. Daj mi znać swoje wyniki. Wszystko działa dobrze na tym końcu w Safari, FF, Opera na OSX. Służy wyłącznie do naprawiania problematycznego błędu IE8 i może mieć niezamierzone wyniki:
Stosowanie:
źródło
stop
metody i nie mogłem jej znaleźć w msdn. Co to robi?.stop()
zgłasza wyjątek, ponieważ nie istnieje. Każdy wyjątek przyniesie pożądany efekt.e.preventDefault()
ponieważ i tak wyrzuci wyjątek ...preventDefault
jest powszechnym standardem; używanie adhoc za każdym razem, gdy chcesz być zgodny ze starymi wersjami IE, jest kłopotliwe, lepiej użyć polifill:Spowoduje to zmodyfikowanie prototypu zdarzenia i dodanie tej funkcji, która jest świetną cechą javascript / DOM w ogóle. Teraz możesz używać
e.preventDefault
bez problemu.źródło
return false
Twój słuchacz powinien działać we wszystkich przeglądarkach.źródło
FWIW, na wypadek, gdyby ktoś powrócił do tego pytania później, możesz również sprawdzić, co przekazujesz funkcji obsługi onKeyPress.
Wystąpił ten błąd, gdy przez pomyłkę przekazałem onKeyPress (this) zamiast onKeyPress (event).
Jeszcze coś do sprawdzenia.
źródło
Pomogła mi metoda z kontrolą funkcji. Ta metoda działa w IE8
źródło