2010-01-29 8 views
0

J'ai franchement essayé plusieurs avenues différentes de google sur cet erro mais je me frappe la tête contre un mur de briques.Erreur d'exécution Microsoft JScript: Objet attendu

J'ai ce petit morceau de jquery dans mon code derrière:

tbxProdAC.Attributes.Add("onclick", "$('radProdAC.ClientID').attr('checked', true); $('ddlBuyer.ClientID').val('--Choose Buyer--'); $('ddlSub.ClientID').val('--Choose Sub Category--'); $('ddlProd.ClientID').val('--Choose Product--');"); 

Cependant, chaque fois que je clique sur la zone de texte, avec le débogage activé, j'ai reçu l'erreur ci-dessus sur la ligne suivante:

<input name="ctl00$ContentPlaceHolder1$tbxProdAC" type="text" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$tbxProdAC\',\'\')', 0)" onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;" id="ctl00_ContentPlaceHolder1_tbxProdAC" class="completionList2" onclick="$('radProdAC.ClientID').attr('checked', true); $('ddlBuyer.ClientID').val('--Choose Buyer--'); $('ddlSub.ClientID').val('--Choose Sub Category--'); $('ddlProd.ClientID').val('--Choose Product--');" style="z-index: 1; left: 200px; top: 475px; position: absolute; height: 20px; width: 345px;" /> 

Maintenant ctl00 $ ContentPlaceHolder1 $ tbxProdAC n'existe pas vraiment. C'est un contrôle qui se trouve sur une page de contenu dans un espace réservé au contenu.

Comment puis-je m'assurer que jquery se réconcilie avec l'ID correct ou comment m'assurer que le détenteur de contenu ne modifie pas l'ID de contrôle d'origine?

Toute aide grandement reçue car je deviens folle en essayant différentes choses!

Répondre

0

Dans le gestionnaire d'événement onchange, vous n'avez pas besoin du bit javascript, vous pouvez appeler la fonction directement, vous n'avez besoin de faire cela que si vous appelez la fonction par un href. Vous ne pouvez pas non plus transmettre les paramètres comme vous le faites dans le délai d'expiration. Cela peut valoir la peine d'appeler le délai d'expiration de la fonction plutôt que d'appeler l'événement. Dans tous les cas, vous pouvez appeler la fonction dans le délai d'expiration de manière anonyme, par exemple;

setTimeout(function(){youfunction here with parameters}, 0); 

Aussi je voudrais déplacer toutes les choses qui se passent dans les autres événements, cliquez sur etc dans leurs propres fonctions. Si vous déplacez toutes ces choses dans des fonctions peut-être dans un fichier js externe, vous serez en mesure de retracer plus ce qui se passe comme il sera plus clair. Utilisez également firebug pour le débogage si ce n'est déjà fait. Si vous avez besoin d'obtenir des vars générés à partir de la page, alors juste sur les vars dans la page et appelez-les à partir de la js.

Il est possible dans jquery do d'être trop spécifique et de parcourir le dom pour trouver des choses plutôt que de s'y référer explicitement non seulement cela facilite le code mais le rend plus générique donc plus réutilisable.

+0

Bonjour Mat - Je pense que je pourrais faire tout le côté serveur, c'est-à-dire sur le gestionnaire d'événement onchange comme vous le suggérez! Au moins, je sais ce que je fais là !!! –

0
tbxProdAC.Attributes.Add( 
    "onclick", 
    "$('" + radProdAC.ClientID + "').attr('checked', true); $('" + ddlBuyer.ClientID + "').val('--Choose Buyer--'); $('" + ddlSub.ClientID + "').val('--Choose Sub Category--'); $('" + ddlProd.ClientID + "').val('--Choose Product--');" 
); 

Vous devez obtenir l'ID client, qui doit être fait en dehors des guillemets.

"$('radProdAC.ClientID').attr('checked', true); doit être changé en "$('" + radProdAC.ClientID + "').attr('checked', true); partout où il est tapé.

+0

Bonjour Nick - J'ai essayé d'utiliser la syntaxe que vous avez suggérée mais les erreurs restent. Le plus frustrant. –

+0

Pouvez-vous nous montrer le rendu HTML au navigateur après avoir fait ce changement? Cela pourrait aider à résoudre le problème. –

Questions connexes