我已经看到了一些关于如何在控件位于使用MasterPage的页面上从JavaScript文本框中获取值的示例。但是,它对我不起作用。
这是我的JavaScript代码:
function changeRedTextToBlackMasterPage()
{
// Get the value for the textboxes:
var userNameEntry = document.getElementById('<%= UserName_tbx.ClientID %>').value;
注意:该功能位于单独的JavaScript文件中。
以下是页面来源:
<input name="ctl00$ContentsPlaceHolder1$UserName_tbx" type="text" value="ww" maxlength="20" id="ctl00_ContentsPlaceHolder1_UserName_tbx" onblur="changeRedTextToBlackMasterPage()" style="width:150px;" />
以下是我遇到的错误:
SCRIPT5007:无法获取属性值&#39;:对象是 null或undefined
如果我在JavaScript函数中使用生成的页面中的ID,则代码可以正常工作。
var userNameEntry = document.getElementById('ctl00_ContentsPlaceHolder1_UserName_tbx').value;
那么,为什么在这种情况下没有使用ClientID工作呢? 文本框位于表格中。但是,我认为这不会有所作为。 (我是否在我看不到的代码中输入错误?我尝试将示例复制/粘贴到我的代码中以进行比较。)
以下是从页面到文本框定义点的其余代码:
<%@ Page Language="C#" MasterPageFile="~/RaptorNestSurveyMaster01.master" AutoEventWireup="true" CodeFile="EditUserInformation.aspx.cs" Inherits="EditUserInformation" Title="Edit User Information Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentsPlaceHolder1" Runat="Server">
<div>
<asp:label ID="PageTitle_lbl" runat="server" CssClass="pageTitle" text="Edit User Information Page" />
<br /> <br /> <br />
<table>
<tr>
<td>
<asp:Label ID="UserName_lbl" runat="server" Text="User Name:"></asp:Label>
</td>
<td style="width: 745px">
<asp:TextBox ID="UserName_tbx" runat="server" MaxLength="20" Width="150" onblur="changeRedTextToBlackMasterPage()" ></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="UserName_tbx" ErrorMessage="User Name is required."></asp:RequiredFieldValidator>
<asp:Label ID="UserNameErrorMessage_lbl" runat="server" ForeColor="Red" Text="" Visible="false"></asp:Label>
</td>
</tr>
答案 0 :(得分:3)
在aspx文件中声明文本控件之后,必须放置对javascript方法changeRedTextToBlackMasterPage()
的调用。但是,实际的方法可以在之前或之后写入。请注意,您的问题与母版页的存在无关。
请查看以下有效的代码段:
<script type="text/javascript">
function changeRedTextToBlackMasterPage() {
// Get the value for the textboxes:
var userNameEntry = document.getElementById('<%= UserName_tbx.ClientID %>').value;
alert(userNameEntry);
}
</script>
<div>
<table>
<tr>
<td>
<asp:Label ID="UserName_lbl" runat="server" Text="User Name:"></asp:Label>
</td>
<td style="width: 745px">
<asp:TextBox ID="UserName_tbx" runat="server" MaxLength="20" Width="150" onblur="changeRedTextToBlackMasterPage()" >pop</asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="UserName_tbx" ErrorMessage="User Name is required."></asp:RequiredFieldValidator>
<asp:Label ID="UserNameErrorMessage_lbl" runat="server" ForeColor="Red" Text="" Visible="false"></asp:Label>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
changeRedTextToBlackMasterPage();
</script>
这是使用JavaScript最常见的陷阱之一。如果您已经在使用JQuery,请考虑在文档的ready事件中调用启动路由。这可确保在浏览器中加载完整文档后运行代码。 e.g。
<script type="text/javascript">
$(document).ready(function () {
changeRedTextToBlackMasterPage();
});
function changeRedTextToBlackMasterPage() {
// Get the value for the textboxes:
var userNameEntry = document.getElementById('<%= UserName_tbx.ClientID %>').value;
alert(userNameEntry);
}
</script>
<div>
<table>
<tr>
<td>
<asp:Label ID="UserName_lbl" runat="server" Text="User Name:"></asp:Label>
</td>
<td style="width: 745px">
<asp:TextBox ID="UserName_tbx" runat="server" MaxLength="20" Width="150" onblur="changeRedTextToBlackMasterPage()" >pop</asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="UserName_tbx" ErrorMessage="User Name is required."></asp:RequiredFieldValidator>
<asp:Label ID="UserNameErrorMessage_lbl" runat="server" ForeColor="Red" Text="" Visible="false"></asp:Label>
</td>
</tr>
</table>
</div>