Voici mon code 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', '');
}
});
});
Dans tous les navigateurs sauf IE, cela fonctionne très bien. Mais dans IE, cela provoque une erreur. J'ai IE8 donc en utilisant son débogueur JavaScript, j'ai découvert que l' event
objet n'a pas de preventDefault
méthode qui provoque l'erreur et donc le formulaire est envoyé. La méthode est prise en charge dans le cas de Firefox (que j'ai découvert en utilisant Firebug).
De l'aide?
Réponses:
dans IE, vous pouvez utiliser
pour obtenir le même résultat.
Et pour ne pas obtenir d'erreur, vous pouvez tester l'existence de preventDefault:
Vous pouvez combiner les deux avec:
la source
event.preventDefault ? event.preventDefault() : event.returnValue = false;
event.preventDefault();
a cessé de travailler pour moi dans FireFox pour une raison quelconque, à l'improviste. Utilisé le code de moralité et cela a très bien fonctionné. Merci ~$('.something').click(function(e){ e.preventDefault ? e.preventDefault() : event.returnValue = false; });
Si vous liez l'événement via la fonction addEvent de mootools, votre gestionnaire d'événements obtiendra un événement fixe (augmenté) passé en paramètre. Il contiendra toujours la méthode preventDefault ().
Essayez ce violon pour voir la différence dans la liaison d'événements. http://jsfiddle.net/pFqrY/8/
Pour tous les utilisateurs de jQuery , vous pouvez corriger un événement en cas de besoin. Supposons que vous avez utilisé HTML onclick = ".." et obtenez un événement spécifique à IE qui n'a pas preventDefault (), utilisez simplement ce code pour l'obtenir.
Après cela, e.preventDefault (); fonctionne bien.
la source
Je sais que c'est un article assez ancien, mais je viens de passer du temps à essayer de faire fonctionner cela dans IE8.
Il semble qu'il y ait des différences dans les versions d'IE8 car les solutions publiées ici et dans d'autres threads ne fonctionnaient pas pour moi.
Disons que nous avons ce code:
Dans ma
preventDefault()
méthode IE8 existe à cause de jQuery, mais ne fonctionne pas (probablement à cause du point ci-dessous), donc cela échouera.Même si je définis la
returnValue
propriété directement sur false:Cela ne fonctionnera pas non plus, car je viens de définir certaines propriétés de l'objet d'événement personnalisé jQuery.
La seule solution qui fonctionne pour moi est de définir la propriété
returnValue
de la variable globaleevent
comme ceci:Juste pour le rendre plus facile pour quelqu'un qui tentera de convaincre IE8 de travailler. J'espère que IE8 mourra horriblement dans une mort douloureuse bientôt.
METTRE À JOUR:
Comme le souligne sv_in , vous pouvez utiliser
event.originalEvent
pour obtenir l'objet d'événement d'origine et définir lareturnValue
propriété dans celui d'origine. Mais je ne l'ai pas encore testé dans mon IE8.la source
event.originalEvent
. Plus d'informations: stackoverflow.com/a/16675056/22550Mootools redéfinit preventDefault dans les objets Event. Votre code devrait donc fonctionner correctement sur tous les navigateurs. Si ce n'est pas le cas, il y a un problème avec le support ie8 dans mootools.
Avez-vous testé votre code sur ie6 et / ou ie7?
Le doc dit
mais si ce n'est pas le cas, vous voudrez peut-être essayer
la source
Testé sur IE 9 et Chrome.
la source
Pour désactiver une touche du clavier après IE9, utilisez:
e.preventDefault();
Pour désactiver une touche de clavier standard sous IE7 / 8, utilisez:
e.returnValue = false;
oureturn false;
Si vous essayez de désactiver un raccourci clavier (avec Ctrl, comme
Ctrl+F
), vous devez ajouter ces lignes:Voici un exemple complet pour IE7 / 8 uniquement:
Référence: comment désactiver les raccourcis clavier dans IE7 / IE8
la source
Voici une fonction que j'ai testée avec la version nocturne de jquery 1.3.2 et 09-18-2009. Faites-moi savoir vos résultats avec. Tout s'exécute bien à cette fin dans Safari, FF, Opera sur OSX. Il sert exclusivement à corriger un bogue IE8 problématique et peut avoir des résultats inattendus:
Usage:
la source
stop
méthode auparavant et je ne l'ai pas trouvée dans msdn. Qu'est ce que ça fait?.stop()
lève une exception, car elle n'existe pas. Toute exception aura l'effet souhaité.e.preventDefault()
parce que ça lèverait une exception de toute façon ...preventDefault
est une norme répandue; utiliser un adhoc chaque fois que vous voulez être conforme aux anciennes versions d'IE est encombrant, mieux vaut utiliser un polyfill:Cela modifiera le prototype de l'événement et ajoutera cette fonction, une grande fonctionnalité de javascript / DOM en général. Vous pouvez maintenant l'utiliser
e.preventDefault
sans problème.la source
return false
dans votre écouteur devrait fonctionner dans tous les navigateurs.la source
FWIW, au cas où quelqu'un reviendrait sur cette question plus tard, vous pourriez également vérifier ce que vous remettez à votre fonction de gestionnaire onKeyPress.
J'ai rencontré cette erreur lorsque j'ai transmis par erreur onKeyPress (this) au lieu de onKeyPress (event).
Juste autre chose à vérifier.
la source
J'ai été aidé par une méthode avec une vérification de fonction. Cette méthode fonctionne dans IE8
la source