Il semble que votre problème soit causé par une différence dans le traitement de l’object event
dans IE. Dans IE9 et les versions antérieures, l’object événement n’est pas une variable locale dans le contexte du gestionnaire d’événements, mais une variable globale.
Au lieu d’appeler directement event.stopPropagation()
, essayez d’abord ceci:
event = event || window.event; event.stopPropagation();
IE9 remplit apparemment l’object window.event
la place de la variable locale.
Un meilleur moyen consiste à utiliser jQuery pour lier des événements à des boutons et à ne jamais utiliser l’atsortingbut onclick
en HTML. Comme indiqué dans les commentaires, jQuery normalisera l’object événement afin qu’il soit accessible à partir d’une interface commune. Un exemple de ceci serait:
HTML:
< month
Javascript avec jQuery:
$("#prevMonthBtn").click(dateChange);
Vous pouvez trouver un autre moyen de transmettre les arguments formattedDate
in.
Ce qui se passe ici, c’est que cet événement n’entre pas dans le champ de dateChange. Cela fonctionne dans certains navigateurs car ils le rendent disponible pour la fonction qui appelle dateChange mais IE ne le fait pas.
La racine du problème est que vous n’ajoutez pas vos liens “correctement”. Il serait préférable de ne pas générer de code HTML comme vous le faites avec votre setVar , ni de générer des éléments DOM avec jQuery, ce qui ressemblerait à ceci:
var $prev_container = $( '' ) .addClass( 'prev' ) .appendTo( $(this).find('.dateSelect') ); var $prev_month_link = $( '' ) .html( "month" ) .click(function(event){ dateChange( prevMonth ) // I'm not sure where prevMonth comes from, but I would pass it in to dateChange explicitly event.stopPropagation(); }) .appendTo( $prev_container ) // and so on for the other links
La raison en est que vous avez le plein contrôle de la scope de vos fonctions de gestion des événements tout en découplant votre balisage de votre javascript.
Je pense que dans la plupart des cas, lorsque vous utilisez onClick et que vous écrivez des balises à partir de js, vous devez vous arrêter et y penser car il existe presque toujours un moyen de le faire en interagissant directement avec le DOM.
J’espère que ça aide!
//event.stopPropagation (); -> Commenter cette ligne
// Ajouter en dessous de la ligne
(event.stopPropagation)? event.stopPropagation (): event.cancelBubble = true;