2009-05-19 4 views
0

Cela me rend fou! J'essaie d'accéder à un TextArea à l'intérieur du contrôle GridView. Le TextArea est surgi quand un bouton sur un gridview est cliqué. Pour une raison quelconque, textarea.value contient toujours "".Accéder à TextArea dans GridView avec JQuery BlockUI

<asp:GridView ID="gvCategories" runat="server" AutoGenerateColumns="false" 
      onrowcommand="gvCategories_RowCommand"> 

    <Columns> 
    <asp:TemplateField> 
    <ItemTemplate> 
     <input type="button" value="add comment" onclick="showCommentBox()" /> 
    </ItemTemplate> 
    </asp:TemplateField> 

    <asp:TemplateField> 
    <ItemTemplate> 
     <div id="commentBox" style="display:none"> 

    <input type="button" value="move comment input box" onclick="moveComment()" /> 


    <textarea id="txtComment" rows="10" cols="30"> 
    </textarea> 

    </div> 
    </ItemTemplate> 
    </asp:TemplateField> 

    </Columns> 

    </asp:GridView> 




function moveComment() { 

     alert(document.getElementById("txtComment").value); 

    } 

J'ai ajouté ce code sur le côté serveur, mais la zone de texte retourne toujours ""

protected void gvCategories_RowCommand(object sender, GridViewCommandEventArgs e) 
     { 

      var row = (GridViewRow) (e.CommandSource as LinkButton).NamingContainer; 
      var description = (row.FindControl("txtDescription") as TextBox).Text; 
      lblComment.Text = description; 
     } 

Répondre

2

@Azam - Ceci est lié à votre autre post auquel j'ai répondu. Le gridview génère le DIV de commentaire avec tous ses éléments enfants plusieurs fois avec le même ensemble d'ID. J'ai effectué un test à ce sujet et j'ai constaté que chaque appel à document.getElementById("txtComment") renvoie l'élément correspondant suivant dans le DOM avec cet ID jusqu'à ce qu'il parcourt toute la collection d'éléments correspondants, en remontant vers le premier, puis il le fait encore une fois.

C'est la raison pour laquelle vous obtenez un espace vide lorsque vous essayez d'accéder à la valeur de la zone de texte ou de la zone de texte.

Vous devez modifier votre appel à showComment() afin qu'il stocke une référence à l'élément dans la ligne donnée, puis lorsque vous appelez moveComment(), il travaillera sur le même élément et pas seulement l'élément suivant dans le DOM avec le même ID.

0

essayer textarea.innerHTML

regardant votre code qui serait:

alert(document.getElementById("txtComment").innerHTML); 
+0

J'ai essayé! Cela ne retourne rien! – azamsharp

+0

Je pense que c'est parce que cet ID n'est pas unique vu qu'il y en a un par ligne dans votre ItemTemplate. Vous devez ajouter un préfixe unique basé sur l'identifiant de ligne. – j0tt

+0

Merci! En fait mon but principal est d'accéder au Text de la TextBox côté serveur. J'ai remplacé TextArea avec TextBox, mais quand la publication se produit, il renvoie "" dans la propriété TextBox.Text: azamsharp

Questions connexes