可以't获取外部javascript文件上asp:textbox的值
Can't get value of asp:textbox on external javascript file
以下是示例: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>
此处的名称不会出现在弹出框中。
您不能在普通文件(如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();
}
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);
}
Markup <% %>
在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);
}
相关文章:
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 如何将乳胶配方奶粉图像保存到Asp.net中的文件夹中
- 什么'是在asp.net MVC中将本地化的resources.resx文件转换为javascript文件的有效
- 有什么“;错误的”;将javascript放在asp.net表单上,而不是放在单独的文件中
- 为什么可以't我将数据从c#发送到asp.net中的Javascript文件
- 使用ajax上传的文件返回错误,但使用c#在asp.net的服务器端正常提交的文件
- asp.net网站文件下载历史记录
- Asp-mvc剃刀将输入文件的值存储在文本框中
- 隐藏错误消息“;未选择文件”;asp:fileUpload的文本
- ASP.NET MVC 脚本.渲染不合并文件..
- 在 Literals 中加载 JavaScript 文件是一种不好的做法吗?(ASP.NET)
- 如何在 WebAPI 中上传文件以及一些复杂类型 ASP.NET
- 在Asp.net的空网站中,如何改变"Web.config”;使内容(.js)文件显示在浏览器中,而不是下载
- 创建文件上载进度栏ASP.NET和JavaScript
- 排除子页中的母版页 JS 文件 asp.net
- 使用处理程序动态创建 JS 文件 ASP.net
- 如何在 MVC 中添加本地化到外部 js 文件 Asp.net
- Ajaxupload.js如何将查询参数传递给ashx文件 asp.net
- 禁用保存并在下载文件 ASP.NET 另存为
- 如何获得客户端文件路径时,上传文件asp.net mvc