206 votes

La fonction event.preventDefault () ne fonctionne pas dans IE.

Voici mon code javascript (mootools) code:

$('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 bien. Mais sous IE, cette cause d'erreur. J'ai IE8 ainsi, alors que l'aide de son débogueur javascript, j'ai trouvé que l' event objet n'a pas de preventDefault méthode qui est à l'origine de l'erreur et de la forme est donc par soumission. La méthode est prise en charge en cas de firefox (que j'ai découvert à l'aide de firebug).

Toute Aide?

480voto

Alsciende Points 11508

dans IE, vous pouvez utiliser

 event.returnValue = false;
 

pour atteindre le même résultat.

Et afin de ne pas avoir d'erreur, vous pouvez tester l'existence de preventDefault:

 if(event.preventDefault) event.preventDefault();
 

23voto

pcguru Points 1535

Si vous liez le cas si mootools addEvent fonction de votre gestionnaire d'événements fixe événement passé comme paramètre. Il contiendra toujours la méthode preventDefault ().

Essayez ce violon trop voir la différence en cas de liaison. http://jsfiddle.net/pFqrY/8/

Pour tous jQuery utilisateurs là-bas, vous pouvez fixer un événement en cas de besoin. Dire que vous avez utilisé HTML onclick=".." et obtenez une IE événement spécifique qui manque de preventDefault(), il suffit d'utiliser ce code pour l'obtenir.

e = $.event.fix(e);

Après que l'e.preventDefault(); fonctionne très bien dans tous les navigateurs, y compris IE.

12voto

muffir Points 124

Je sais que c'est un assez vieux post, mais j'ai juste passé un peu de temps à essayer de faire ce travail dans IE8.

Il semble qu'il existe certaines différences dans IE8 versions car les solutions posté ici et dans d'autres threads ne fonctionne pas pour moi.

Disons que nous avons ce code:

$('a').on('click', function(event) {
    event.preventDefault ? event.preventDefault() : event.returnValue = false;
});

Dans mon IE8 preventDefault() méthode existe en raison de jQuery, mais ne fonctionne pas (sans doute parce que du point ci-dessous), de sorte que ce sera un échec.

Même si j'ai mis en returnValue directement la propriété à false:

$('a').on('click', function(event) {
    event.returnValue = false;
    event.preventDefault();
});

Ce aussi de ne pas travailler, parce que je viens de mettre certains biens de jQuery personnalisé objet d'événement.

La seule solution qui fonctionne pour moi est de définir la propriété returnValue de variable globale event comme ceci:

$('a').on('click', function(event) {
    if (window.event) {
        window.event.returnValue = false;
    }
    event.preventDefault();
});

Juste pour le rendre plus facile pour quelqu'un qui va essayer de convaincre IE8 pour travailler. J'espère que IE8 va mourir horriblement douloureux de la mort bientôt.

Mise à JOUR:

Comme sv_in points, vous pouvez utiliser event.originalEvent pour obtenir un exemplaire original de l'objet événement et définissez returnValue propriété dans l'original. Mais je ne l'ai pas testé dans mon IE8 encore.

6voto

Alsciende Points 11508

Mootools redéfinit preventDefault dans les objets Event. Donc, votre code devrait fonctionner correctement sur tous les navigateurs. Si ce n'est pas le cas, il y a un problème avec ie8 support dans mootools.

Avez-vous testé votre code sur IE6 et / ou IE7?

Le doc dit

Chaque événement ajouté avec addEvent récupère automatiquement la méthode mootools, sans qu'il soit nécessaire de l'utiliser manuellement.

mais dans le cas contraire, vous pouvez essayer

 new Event(event).preventDefault();
 

5voto

RolandoCC Points 191
 if (e.preventDefault) {
    e.preventDefault();
} else {
    e.returnValue = false;
}
 

Testé sur IE 9 et Chrome.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X