我需要在ASP.Net中使用文本框的OnFocus事件。
<asp:TextBox ID="TBAccountNum" runat="server" CssClass="textbox" Height="12px" Width="100px" Font-Size="Small" AutoCompleteType="None" Wrap="False" OnFocus="Validator()" OnTextChanged="TBAccountNum_OnLeave" AutoPostBack="true"></asp:TextBox>
唯一的方法是使用Javascript,我对此一无所知。我在SO上发现了一小段代码看起来应该可以工作:
<asp:Content runat="server" ID="FeaturedContent" ContentPlaceHolderID="FeaturedContent">
<script type="text/javascript">
function Validator()
{
document.getElementsByName("btnValidateWork").style.visibility = "visible";
document.getElementsByName("btnSubmitWork").style.visibility = "hidden"
}
然而,当我运行它时,我收到以下错误:
0x800a138f - Microsoft JScript运行时错误:无法设置值 属性&#39; visibility&#39 ;: object为null或undefined
任何想法我做错了(除了尝试编写代码我都不知道......:oP)?
现已发布所有相关代码。如果重要的话,我在内联网上使用IE9(由公司授权,以便不能改变)。
答案 0 :(得分:1)
document.getElementsByName(“btnValidateWork”)返回一个htmlcollection。你必须迭代它,并为每个项目(节点)添加适当的CSS。
看看这个:Using document.getElementsByName() isn't working?
编辑:
要使用getElementsByName,您的元素必须具有name属性。例如:
<button name="btnValidateWork">my button?</button>
document.getElementsByName("btnValidateWork")[0].style.visibility = "hidden";
小提琴:http://jsfiddle.net/chrisbenseler/h3dwwud6/
我认为更好的方法是使用getElementsByClassName并为其添加一些类,然后执行类似document.getElementsByClassName(“hidden”)
的操作答案 1 :(得分:0)
如前所述,document.getElementsByName
返回HTML对象的集合(数组)。所以你需要这样解决它们:
function Validate()
{
// To access the first
document.getElementsByName("btnValidateWork")[0].style.visibility = "visible";
document.getElementsByName("btnSubmitWork")[0].style.visibility = "hidden"
// To access all of them
var i = 0,
validWork = document.getElementsByName("btnValidateWork");
for (i = 0; i < validWork.length; i++) {
validWork[i].style.visibility = "visible";
// ...
}
}
查看工作示例here。