2014-10-31 54 views
1

我想更新位于文本框旁边的隐藏字段的值。原因是因为它在.net中继器内部,所以我无法从没有回传的代码中更新它,这需要很长时间。使用jquery更新中继器的隐藏字段值

HTML

<asp:Repeater ID="rptTranslations" runat="server" OnItemDataBound="rptTranslations_ItemDataBound"> 
        <ItemTemplate> 
         <tr id="rptRow" runat="server" class="form-line-input"> 
          <td> 
           <asp:TextBox ID="txtEnglish" runat="server" ReadOnly="true" Text="" Width="475px"></asp:TextBox></td> 
          <td> 
           <asp:HiddenField ID="hiddenRecordId" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "recordId") %>' /> 
           <asp:HiddenField ID="hiddenUpdated" runat="server" Value='false' /> 
           <asp:TextBox ID="txtLanguage" runat="server" CssClass="jq-translation" Text="" Width="475px"></asp:TextBox></td> 
         </tr> 
        </ItemTemplate> 
       </asp:Repeater> 

jQuery的 我用 '名',因为当HTML返回到浏览器的名称是 'ctl00 $ ContentPlaceHolder1 $ rptTranslations $ ctl00 $ hiddenUpdated' 和ID有额外的文本最后。

$(document).ready(function() { 
       $('.jq-translation').change(function() { 
        $(this).closest("[name$='hiddenUpdated']").val("true"); 
       }); 
      }); 

更新文本框时,隐藏字段的值不会更改。

+0

你用'id * = hiddenUpdated'试过了吗? – 2014-10-31 16:33:21

+0

最接近DOM树中的祖先,而不是兄弟姐妹。因此,尽量使用http://api.jquery.com/siblings/ – lshettyl 2014-10-31 16:37:23

回答

0

我曾尝试以下可自动生成你的jQuery选择用它代替了名的,它的工作原理。使用.prev()而不是.closest()。如果仔细观察,则需要prev元素。

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('.jq-translation').change(function() { 
      $(this).prev().val("true"); 
     }); 
    }); 
</script> 
0

检查html源代码中隐藏字段的名称,或使用firbug并确保它是您在jquery选择器中查找的名称。

所以我建议一类添加到这个隐藏字段,因为它会通过asp.net

+0

ClientIDMode =“Static”在中继器上工作吗? – Stuart 2014-10-31 16:26:15

+0

我改变了我的答案,因为静态ID不会在你的情况下工作 – 2014-10-31 16:31:21

0

如果你是确保“名”与“hiddenUpdated”,关于使用

$(document).ready(function() { 
    $('.jq-translation').change(function() { 
     $(this).siblings().filter("[name$='hiddenUpdated']").val("true"); 
    }); 
}); 

怎么也结束,请参阅我的评论你的问题为好,至于为什么我用兄弟姐妹()。