Cha*_*adD 7 javascript asp.net
我的网页中有以下文本框服务器控件:
<asp:TextBox ID="txtZip" runat="server" onchange="ZipCode_OnChange(this, <%= txtZip.ClientId %>, txtCity, txtState);/">
Run Code Online (Sandbox Code Playgroud)
页面呈现时,它包含以下内容:
<input name="txtZip" type="text" id="txtZip" onchange="ZipCode_OnChange(this, <%= txtZip.ClientId %>, txtCity, txtState);" />
Run Code Online (Sandbox Code Playgroud)
我正在尝试将文本框的客户端ID作为第二个参数传递给此Javascript函数:
function ZipCode_OnChange(txtZipCode, ClientId) {
var ret;
ret = WebService.GetCityAndState(txtZipCode.value, OnComplete1, OnError, ClientId);
}
Run Code Online (Sandbox Code Playgroud)
如何在服务器上获取它,评估texbox的控件并将该文字字符串传递给Javascript函数?
Amr*_*rhy 14
放在<%= txtZip.ClientId %>单引号之间,如下所示:
'<%= txtZip.ClientId %>'
<asp:TextBox ID="txtZip" runat="server" onchange="ZipCode_OnChange(this, '<%= txtZip.ClientId %>', txtCity, txtState);" />
Run Code Online (Sandbox Code Playgroud)
更新
请查看这篇文章:http://www.jagregory.com/writings/how-to-use-clientids-in-javascript-without-the-ugliness/
我也喜欢这个答案
有很多方法可以解决这个问题,但我发现在一般情况下最简单的方法是使用ScriptManager在我的页面顶部包含一个单独的脚本,专门用于添加ClientID:
void AddClientIDs()
{
var clientIDs = new StringBuilder();
var declaration = "var {0}={1};";
clientIDs.AppendFormat(declaration, "txtZip", txtZip.ClientID);
ClientScript.RegisterClientScriptBlock(this.GetType(), "ClientIDs", clientIDs.ToString(), true);
}
Run Code Online (Sandbox Code Playgroud)
在PreRender事件中调用它(在数据绑定之后的某个地方).然后,如果你想得到一点幻想,你可以轻松地调整方法以接受IEnumerable或params控件数组,并让它使用javascript变量名称的控件名称.有时我这样做,但通常很简单,只需将我需要的东西直接添加到方法中.
即使这有点尴尬,因为包括在其他命名容器(如网格)中的控件仍然可能导致问题.我想看看ASP.Net团队很快将这样的东西直接构建到框架中,但我并不是真的期待它:(
<asp:TextBox ID="txtZip" runat="server" onchange="ZipCode_OnChange(this, txtCity, txtState);">
function ZipCode_OnChange(element, txtCity, txtState) {
var ClientId = element.getAttribute('id'),
ret = null,
value = element.value;
ret = WebService.GetCityAndState(value, OnComplete1, OnError, ClientId);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52014 次 |
| 最近记录: |