2009-12-16 7 views
1

S'il vous plaît excuser mon ignorance Je ne suis pas très familier avec Javascript et ont été chargés de réparer un bug par un développeur n'est plus à l'entreprise. L'onclick fonctionne parfaitement dans FireFox, mais dans IE 7 & 8 (les seuls que nous testons), il semble courir à travers les fonctions onclick correctement, puis au lieu que les données soient soumises à l'URL du formulaire dans goStep3 (), il parcourt chaque onclick sur la page, avec 'href = "#"' puis soumet finalement avec des informations incorrectes que la variable a été écrasée 50 fois.Onclick javascript ne fonctionne pas correctement dans IE

<a href="#" onclick="trackSponsor(62, 64265); goStep3(1896, 64265, 0); return false;">view</a> 

EDIT: Quand je lance trackSponsor(62, 64265); goStep3(1896, 64265, 0); return false; dans les outils de développement dans IE8 Je reçois une erreur de retour faux en dehors d'une fonction .... enlever que cela fonctionne très bien.

est la ligne que je belive est à l'origine des problèmes

trackSponsor() fonctionne correctement et retourne false

goStep3() est une assez grande fonction mais il fonctionne en récupérant des valeurs de 4 autres fonctions au sein de , en attribuant les valeurs à une URL dans les theAction

Il complète la fonction par EDIT:

var yr = $("#find-yr").attr('value'); 
var me = $("#find-me").attr('value'); 
var mo = $("#find-mo").attr('value'); 
var keywords = $("#find-keywords").attr('value'); 
var theAction = PATH_BASE+'find/step3/'+p_term+'/'+p_id+'/'+p_l_id+'/'; 

document.forms['FindForm'].action = theAction; 
document.FindForm.submit(); 
return true; 

J'ai essayé de retourner false à partir de cette fonction, ainsi que de changer le document.FindForm.submit() à la syntaxe 'correcte' de document.forms['FindForm'].submit() et il ne se soumet toujours pas avant d'avoir parcouru tous les autres 'onclick' de la page.

Merci d'avance!

Notes:

jQuery est utilisé aussi bien.

Javascript ne place aucune erreur.

Cela fonctionne très bien dans FireFox

Je peux le voir passer par toutes les autres fonctions de l'autre « est onclick à l'aide des outils de développement et de progression à travers la page, il ne présente pas les résultats de goStep3 jusqu'à ce qu'il a connu toutes les autres fonctions 'onclick' sur la page.

+0

Si vous réduisez votre fonction goStep3 vers le bas juste la soumission du formulaire, ce qui se passe? – Zoidberg

+0

modifié pour inclure cette information. C'est presque comme si le 'onclick' est en train de déclencher tous les 'onclick' sur la page entière ... – user103219

+1

Pouvez-vous poster plus de code de la fonction goStep3(). J'ai fait quelques tests basés sur le code que vous avez présenté ici et je ne peux pas reproduire vos résultats. Utilisez-vous des frameworks javascript tels que jQuery ou Prototype? –

Répondre

0

Le problème a été appelé en raison de la façon dont IE utilise la bulle! Merci à tous pour votre aide, j'ai inclus la solution de code à placer dans goStep3().

var browserName = navigator.appName; 
if (browserName == "Microsoft Internet Explorer") { 
    window.event.cancelBubble = true;  
} 
+0

bon à savoir vous avez trouvé la réponse :) –

0

Je voudrais commencer par supprimer "return false;" de l'événement onClick car il ne fait vraiment rien.

+3

Il arrête le lien à '#' suivi, faisant sauter la page et potentiellement arrêter la navigation. Il doit * être * laissé. – bobince

+0

essayé qu'il n'a pas fait d'effet. – user103219

+0

Oh oui, c'est logique maintenant que j'y pense. La réponse ci-dessous faisant référence à "javascript: void (0)" résoudrait cela. –

0

essayer de changer

href="#" 

avec

href='javascript:void(0)' . 
+0

Désolé, cela ne fait aucun effet non plus. – user103219

0

Je ne peux pas dire avec certitude où les choses vont mal, mais je Décourager l'utilisation name attribut d'un formulaire pour faire référence comme vous l'avez fait ici:

document.forms['FindForm'].action = theAction; 
document.FindForm.submit(); 

Pourquoi ne pas essayer le jQuery suivant:

$("form:FindForm").action = theAction; 
$("form:FindForm").trigger("submit"); 

Vous devez également vérifier que $("form:FindForm") fait effectivement référence à l'élément de formulaire souhaité.

+0

Désolé je n'ai pas écrit le code, je viens d'être chargé d'essayer de le réparer. Votre méthode retourne 'Object Expected' dans le fichier query-1.2.3 et 'Object ne supporte pas cette propriété ou méthode' dans goStep3() – user103219

+0

L'élément de formulaire est introuvable. Vous recevez cette erreur car vous ne pouvez pas atteindre '.action' sur un objet manquant. Envisagez de donner à l'élément de formulaire un attribut "id" et de le référencer de cette manière. –

+0

Ok, cette ligne document.FindForm.submit(); est utilisé plusieurs endroits et travaille. En fait, le formulaire est

user103219

1

"affichant mon commentaire précédent comme une réponse"

je vois beaucoup de Jquery être utilisé avec des sélecteurs d'attributs, afin plz vérifier le code contre ceux ..

EDIT:

J'ai remarqué que vous n'êtes pas familier avec Javascript .. donc dans le cas où vous ne le saviez pas, un sélecteur jQuery sélectionnera toutes les étiquettes correspondant à un certain "sélecteur-filtre" et effectuera une certaine action dessus ... donc s'il y a un sélecteur qui sélectionne Tous A tags avec un attribut href (ou peut-être un autre attribut commun entre eux ..) alors ce serait la cause de votre problème.

EDIT: -après vous avez publié votre réponse -

heureux que vous ayez trouvé une réponse ..

si elle est alittle werid, cause en fonction de votre question, il passe par « tous les éléments avec href = « # » ..

Cependant Selon msdn, l'événement bouillonnant passe simplement ces événements à l'élément non gérées parent pour la manipulation. non par « similaires » balises :)

oh well..nothing est logique en ce qui concerne IE

+0

Merci pour cela! – user103219

Questions connexes