2010-04-20 6 views
0

j'ai écrit une simple fonction javascript pour valider les champs dans une page ASPXErreur d'exécution Microsoft JScript: Object requis

function validate() 

{ 
if (document.getElementById("<%=tbName.ClientID%>").value=="") 
    { 
      alert("Name Feild can not be blank"); 
      document.getElementById("<%=tbName.ClientID%>").focus(); 
      return false; 
    } 
    if (document.getElementById("<%=ddlBranch.ClientID%>").value=="SelectBranch") 
    { 
      alert("Branch Should Be Selected"); 
      document.getElementById("<%=ddlBranch.ClientID%>").focus(); 
      return false; 
    } 

} 

Tout fonctionnait bien. Plus tard, je l'ai lié à la page aspx comme un fichier js externe.

tête runat = "server">

script src = le type "validation.js" = "text/javascript">

/script>

<title>Validations</title> 

/head>

<form id="form" runat="server"> 



<asp:Label ID="lblName" runat="server" Text="Nmae: ">/asp:Label> 
<asp:TextBox ID="tbName" runat="server" Width="130px">/asp:TextBox> 

<asp:Label ID="lblBranch" runat="server" Text="Branch:">/asp:Label> 
    <asp:DropDownList ID="ddlBranch" runat="server" Width="107px"> 
     <asp:ListItem>CSE</asp:ListItem> 
     <asp:ListItem>ECE</asp:ListItem> 
     <asp:ListItem>CIVIL</asp:ListItem> 
     <asp:ListItem>MECH</asp:ListItem> 
     <asp:ListItem Selected="True" Value="SelectBranch">SelectBranch</asp:ListItem> 
    </asp:DropDownList>  
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClientClick="return validate(<%=tbName.ClientID%>, <%=ddlBranch.ClientID%>)" /> 

</form> 

et

Dans la page aspx.cs

protected void Page_Load (object sender, EventArgs e)

{ 
    Page.RegisterClientScriptBlock("MyScript", "<SCRIPT Language='JavaScript' src='validation.js'></SCRIPT>"); 
    btnSubmit.Attributes.Add("onclick", "return validate()"); 

} 

Maintenant, son erreur donnant "erreur d'exécution Microsoft JScript: Objet requis". Je ne suis pas capable de savoir où je me suis trompé.

Répondre

7

Votre script peut uniquement exécuter à l'intérieur de la page aspx telle qu'elle est. <%=tbName.ClientID%> est logique côté serveur, il est de placer le littéral ID côté client dans la sortie au client, donc avant qu'il ne ressemblait à ceci au moment du rendu dans le code HTML:

document.getElementById("tbName") 
//looks for <input id="tbName" /> 

Maintenant, il semble juste comme ceci:

document.getElementById("<%=tbName.ClientID%>") 
//looks for <input id="<%=tbName.ClientID%>" /> ... doesn't exist :) 

Comme il est plus de trouver un objet/élément (parce que ID n'existe pas) vous obtenez l'erreur object required. Vous devez soit garder cette logique dans la page, ou passer à une autre approche en utilisant des classes, etc. Si vous faites beaucoup de validation, je voudrais jeter un oeil à jQuery et le validation library.


Mise à jour: est ici la solution T.J. prévue dans les commentaires que vous en pleine forme de texte pour une lecture plus facile.Si vous ne valider quelques champs, c'est la solution la plus simple à votre situation:

function validate(nameId, branchId) { 
    if (document.getElementById(nameId).value=="") 
    { 
      alert("Name Feild can not be blank"); 
      document.getElementById(nameId).focus(); 
      return false; 
    } 
    if (document.getElementById(branchId).value=="SelectBranch") 
    { 
      alert("Branch Should Be Selected"); 
      document.getElementById(branchId).focus(); 
      return false; 
    } 
} 

Dans votre code-behind:

//Note your current method is deprecated after .Net 2.0+, should use this instead: 
//ClientScript.RegisterClientScriptInclude("validation", "validation.js"); 
Page.RegisterClientScriptBlock("MyScript", "<script type='text/javascript' src='validation.js'></script>"); 
btnSubmit.Attributes.Add("onclick", string.Format("return validate('{0}','{1}')", tbName.ClientID, ddlBranch.ClientID)); 
+1

@OP: Vous pouvez le déplacer vers son propre fichier si vous faites les ID des éléments pour valider les paramètres de la fonction, par exemple 'function validate (nameId, branchId)', puis utilisez 'nameId' au lieu de' "<% = tbName.ClientID%> "' et 'branchId' au lieu de' "<% = ddlBranch.ClientID%>" '(notez que vous n'utilisez plus les guillemets; par exemple. 'document.getElementById (nameId) .value'). Ensuite, le script de votre page ASPX peut appeler la fonction 'validate' dans le fichier externe comme suit:' validate ("<% = tbName.ClientID%>", "<% = ddlBranch.ClientID%>") '. –

+0

@ T.J. - +1 Bonne solution, tant que ce ne sont que quelques champs qui seraient parfaitement gérables. –

+0

@ T.J. - Ajouté à la réponse afin que le formatage soit plus facile à lire - Si vous changez d'avis à partir d'un commentaire et que vous répondez vous-même, je vais supprimer, juste @me je le sais! –

1

donner l'objet que vous souhaitez référencer un identifiant html qui serait sortie comme

<div id="myid"></div> 

que vous pouvez référencer par

document.getElementById("myid") 
Questions connexes