2009-05-19 2 views
0

Это сводит меня с ума!Доступ к TextArea Inside GridView с помощью JQuery BlockUI

Я пытаюсь получить доступ к TextArea внутри элемента управления GridView. TextArea появляется, когда нажата кнопка на экране сетки. По какой-то причине значение textarea.value всегда содержит "".

<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); 

    } 

Я добавил этот код на стороне сервера, но TextBox всегда возвращает ""

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; 
     } 

ответ

2

@Azam - Это относится к вашему другому post, на который я ответил. Сетка представляет собой генерацию commentBox DIV вместе со всеми ее дочерними элементами несколько раз с тем же набором идентификаторов.

Я проверил тест на это и обнаружил, что каждый вызов document.getElementById("txtComment") возвращает следующий соответствующий элемент в DOM с этим Id до тех пор, пока он не перекроет всю коллекцию соответствующих элементов, возвращаясь к первому, а затем он сделает это сначала.

Это причина, по которой вы получаете пустоту при попытке получить доступ к значению текстового поля или текстового поля.

Вам необходимо изменить ваш звонок на showComment(), чтобы он сохранял ссылку на элемент в данной строке, а затем, когда вы вызываете moveComment(), он будет работать на том же элементе, а не только на следующем элементе в DOM, тот же идентификатор.

0

попробовать textarea.innerHTML

глядя на свой код, который будет:

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

Пробовал! Он ничего не возвращает! – azamsharp

+0

Я думаю, это потому, что этот идентификатор не уникален, так как в вашей ItemTemplate есть одна строка. Вам нужно добавить уникальный префикс на основе идентификатора строки. – j0tt

+0

Спасибо! На самом деле, моя основная цель - получить доступ к тексту TextBox на стороне сервера. Я заменил TextArea на TextBox, но когда возвращается postback, он возвращает «» в свойстве TextBox.Text: azamsharp

Смежные вопросы