我在编辑模式下有一个带有TextBox的GirdView。
我需要在JavaScript中使用ID(来自浏览器中的源代码)检索此TextBox。
ctl00$MainContent$uxListOptions$ctl02$uxValueInput
但是我收到错误,因为我的JavaScript无法找到TextBox。
以下是代码:
<span onclick="encodeMyHtml('<%# UniqueID.Replace("$", "_") %>_FormViewContentManager_ContentTextBox')">
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update" Text="[Publish]" />
</span>
在我的控件的OnPageLoad中,我称之为:
private void addEditorJavaScript()
{
// create our HTML encoder javascript function
// this way it shows up once per page that the control is on
string scr = @"<script type='text/javascript'>function encodeMyHtml(name){
var content = document.getElementById(name).value
content = content.replace(/</g,'<');
content = content.replace(/>/g,'>');
document.getElementById(name).value = content;
}</script>";
// add the javascript into the Page
ClientScriptManager cm = Page.ClientScript;
cm.RegisterClientScriptBlock(this.GetType(), "GlobalJavascript", scr);
}
我正在尝试使用此代码http://dustyreagan.com/how-to-submit-html-without-disabling/
任何想法我做错了什么?谢谢你们!
答案 0 :(得分:1)
如果您使用的是ASP.Net 4.0,则可以对此控件使用ClientIdMode = Static或Predictable。
答案 1 :(得分:0)
encodeMyHtml('<%# UniqueID.Replace("$", "_") %>_FormViewContentManager_ContentTextBox')
这将导致
encodeMyHtml('ctl00_MainContent_uxListOptions_ctl02_uxValueInput_FormViewContentManager_ContentTextBox')
您的DOM中是否存在该ID的控件?
似乎你在如何创建ID方面做了很多假设。最好立即引用ContentTextBox.ClientID
。
如下所示,前提是ContentTextBox
是对文本框的有效引用:
encodeMyHtml('<%# ContentTextBox.ClientID %>')
答案 2 :(得分:0)
您可以像这样定义网格:
<div>
<asp:GridView ID="GridView1" runat="server" Width = "550px"
AutoGenerateColumns = "false" Font-Names = "Calibri"
Font-Size = "12pt" HeaderStyle-BackColor = "LightYellow" AllowPaging ="true" ShowFooter = "true" OnPageIndexChanging = "OnPaging" PageSize = "10" >
<Columns>
<asp:TemplateField ItemStyle-Width = "100px" HeaderText = "Name">
<ItemTemplate>
<asp:TextBox ID="txtPeriod" runat="server" CssClass="css1 mycss" Text='<%# Eval("Period")%>'
onblur="SetPostingPeriod(this)"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<AlternatingRowStyle BackColor="#C2D69B" />
</asp:GridView>
</div>
你的Javascript功能将是:
<script language="javascript" type="text/javascript">
/* Populating same data to all the textboxes inside grid,
once change of text for one textbox - by using jquery
*/
function SetPostingPeriod(obj) {
var cntNbr = $("#" + obj.id).val();
// var cntNbr = document.getElementById(obj.id).value;
// alert(cntNbr);
//Access Grid element by using name selector
$("#<%=GridView1.ClientID %> input[name*='txtPeriod']").each(function (index) {
if ($.trim($(this).val()) != "")
if (!isNaN($(this).val())) {
$(this).val(cntNbr);
}
});
}
</script>
这个Javascript函数被称为文本框的onblur事件。 当同时调用此函数时,它传递一个参数 这只是文本框ID。
使用参数是javascript函数 文本框的ID我们得到了vaue。
以下是代码:
var cntNbr = $("#" + obj.id).val();
然后对于网格内可用的每个“txtPeriod”控件,我们需要分配 当前“txtPeriod”文本框值的值。
循环网格识别每个“txtPeriod”可用: 这是代码:
$("#<%=GridView1.ClientID %> input[name*='txtPeriod']").each(function (index) {
});
在这个循环中,我们需要将“txtPeriod”(当前/修改)值分配给其他 “txtPeriod”文本框。在指定其检查的良好做法之前,它是null还是NAN。
以下是代码:
if ($.trim($(this).val()) != "")
if (!isNaN($(this).val())) {
$(this).val(cntNbr);
}