我有ASP.Net页面,我正在调用这样的JavaScript函数:
Enter server name: <asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" OnClientClick="return AlertOnGo('View Configuration',document.getElementById('<%= txt_name.ClientID %>').value)" Text ="GO!" />
但是点击GO按钮,我收到以下错误:
JavaScript运行时错误:无法获取未定义或空引用的属性“值”
在查看按钮的渲染代码时:
<input type="submit" name="btn_view" value="GO!" onclick="return AlertOnGo('View Configuration',document.getElementById('<%= txt_name.ClientID %>').value);" id="btn_view" />
它没有放置适当的ClientID。我尝试将CLientIDMode设置为测试框的静态,但没有帮助。
此问题与此unanswered question类似。
答案 0 :(得分:9)
这个问题有一些解决方案。
其中一个更简单的方法是将名称移动到JavaScript变量,因为在尝试评估ASP.NET控件的OnClientClick属性中的txt_name.ClientID时,问题只发生在控件中。
<script>
var txtName = '<%= txt_name.ClientID %>';
</script>
Enter server name: <asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click"
OnClientClick="return AlertOnGo('View Configuration',
document.getElementById(txtName).value)" Text ="GO!" />
答案 1 :(得分:3)
您可以在asp:textbox标记
中使用属性ClientIDMode="Static"
像这样
<asp:TextBox ClientIDMode="Static" ID="txt_name" runat="server"></asp:TextBox>
<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click"
OnClientClick="return AlertOnGo('View Configuration',
document.getElementById(txtName).value)" Text ="GO!" />
这样,文本框的客户端ID将与“id”相同,您可以使用
document.getElementById('txt_name').value
它对我有用
答案 2 :(得分:0)
- 编辑答案 - ASPX
<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" OnClientClick="javascript:return AlertOnGo('View Configuration');" Text ="GO!" />
脚本
function AlertOnGo(mode) { var btnId = '<%= txt_name.ClientID %>'; var value=document.getElementById(btnId).value; //your code return false; }
答案 3 :(得分:0)
你正在使用&lt;%=%&gt;在asp.net Web控件的属性中 - 我不希望它工作,因为整个控件将被html取代。
我会将你的javascript移到一个脚本块中,并将事件处理程序附加到代码中,而不是将它全部内联。
Enter server name: <asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" Text ="GO!" />
<script>
document.getElementById('<%= btn_view.ClientID %>').attachEvent('click', function() {
return AlertOnGo('View Configuration',
document.getElementById('<%= txt_name.ClientID %>').value);
});
</script>
答案 4 :(得分:0)
我更喜欢使用String.Concat。您可以使用\ u0027而不是撇号。
OnClientClick='<%#String.Concat("document.getElementById(\u0027", AddToCartBtn.ClientID.ToString(), "\u0027).value = \u0027Adding...\u0027;")%>'
答案 5 :(得分:0)
另一种解决方案是你可以去浏览器做昆虫元素读取文本框的动态ID并在javascript中设置如:
var ddlFunction = document.getElementById('ctl00_SPWebPartManager1_g_ecede3f6_2b87_405a_af1b_70401bb8d4c7_ddlFunction');
HTML:
<asp:DropDownList ID="ddlFunction" runat="server" CssClass="dropDownClass">
<asp:ListItem Selected="True">Select One</asp:ListItem>
<asp:ListItem>Sample 1</asp:ListItem>
<asp:ListItem>Sample 2</asp:ListItem>
</asp:DropDownList>
答案 6 :(得分:0)
您可以创建一个css类并使用它而不是客户端ID(使用jQuery $('。txt_name')。text()):
输入服务器名称:
<asp:TextBox ID="txt_name" CssClass="txt_name" runat="server"></asp:TextBox>