这是示例: 的 abcd.aspx
<asp:TextBox ID="txtFName" runat="server" ></asp:TextBox>
<asp:Button ID="btnLogin" runat="server" Text="Login"
onclick="btnLogin_Click" OnClientClick = "loginAlert()" />
javascriptfile.js
function loginAlert() {
var name = document.getElementById('<% txtFName.ClientID %>').value;
alert(name);
}
链接到.aspx页面上的javascript文件
<script src="../../JSfiles/javascriptfile.js" type="text/javascript"></script>
此处名称未显示在弹出框中。
答案 0 :(得分:2)
您不能在普通文件(例如<%
)中使用代码块(%>
和javascriptfile.js
),因为ASP.NET不会以任何方式解释它们。你可以做的是将文本框的Id传递给函数:
function loginAlert(ctrl) {
var name = document.getElementById(ctrl).value;
alert(name);
}
然后标记将如下所示:
<asp:Button ID="btnLogin" runat="server" Text="Login"
OnClick="btnLogin_Click" OnClientClick="loginAlert('<%=txtFName.ClientID%>')" />
<强>更新强>
我没注意像<%=...%>
之类的构造在服务器端控件声明中不起作用的事实(因为它们在编译页面时基本上转换为Response.Write
语句) 。至少有两种方法可以解决这个问题:
您可以对全局可用的名称文本框的DOM元素进行引用。您的标记将如下所示:
<script type="text/javascript">
var loginNameId = '<%=txtFName.ClientID%>';
</script>
<asp:Button ID="btnLogin" runat="server" Text="Login"
OnClick="btnLogin_Click" OnClientClick="loginAlert()" />
您的loginAlert
将如下所示:
function loginAlert() {
var name = document.getElementById(loginNameId).value;
alert(name);
}
我个人不喜欢这个解决方案,因为你用变量污染全局命名空间,而且一般来说它不是很优雅。
或者,您可以将数据属性与ASP.NET数据绑定一起使用。
标记:
<asp:Button ID="btnLogin" data-name='<%# txtFName.ClientID %>' runat="server" Text="Login"
OnClick="btnLogin_Click" OnClientClick="loginAlert(this)" />
JavaScript的:
function loginAlert(ctrl) {
var name = document.getElementById(ctrl.readAttribute('data-name')).value;
alert(name);
}
代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
DataBind();
}
答案 1 :(得分:1)
标记<% %>
不适用于JS文件。如果你把它放在<script type='text/javascript'>...</script>
里面的aspx页面上,那么它就可以了。
<强>更新强>
如果你想获得客户端ID,那么你可以从变量中的代码注册它,如:
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "JsVariables", "var txtboxClientId='" + txtFName.ClientID + "';", true);
并在Js文件中使用:
function loginAlert() {
var name = document.getElementById(txtboxClientId).value;
alert(name);
}
答案 2 :(得分:1)
ASP.Net解析器不提供javascript文件。因此,忽略<% %>
并按原样输出。
最简单的方法是提供ID作为参数:
<asp:TextBox ID="txtFName" runat="server" ></asp:TextBox>
<asp:Button ID="btnLogin" runat="server" Text="Login"
onclick="btnLogin_Click" />
代码背后的代码:
btnLogin.OnClientClick = string.Format("loginAlert('{0}')", txtFName.ClientID);
并在js文件中:
function loginAlert(txtId) {
var name = document.getElementById(txtId).value;
alert(name);
}