我常常通过执行以下操作来为某些事件注册javascript函数:
myBtn.Attributes.Add("onClick", "Validate(getElementById('"+txtFirstName.ClientID + "'));");
我总是单独使用getElementById
,或者换句话说,没有将文档放在前面。但是当我尝试使用getElementById
而不是document.getElementById
时,我最近打破了网页。为什么是这样?奇怪的是,我有一个网站,其中一个页面允许我只使用getElementById
,但另一个页面抛出一个javascript错误,因为如果我getElementById
,它找不到该元素,它会只有{I} document.getElementById
才有效。
任何人都知道这是为什么?我是否应该在任何地方使用document.getElementById
,无论它是否在没有文档前缀的情况下工作?
编辑: 它可能与一个页面使用AJAX而另一个页面不是吗?
有关答案 0 :(得分:7)
当你使用getElementById()
时它的工作意味着它所调用的函数在文档的上下文中运行,那就是这个==文档。
因此,您应始终使用document.getElementById
来避免此类错误。
无论如何,我甚至会停止使用getElementById并开始使用JQuery,我相信你永远不会后悔。
如果您使用JQuery,您的代码将如下所示:
$("#myBtnID").click(function () { Validate($("#myTextboxID"))});
答案 1 :(得分:3)
您在没有拥有对象的情况下访问的任何函数或变量(例如:document.getElementById)都将从窗口访问该属性。
因此getElementById实际上是window.getElementById,它不是本机定义的(除非你之前定义它(例如:getElementById = document.getElementById)。
答案 2 :(得分:1)
你应该只使用document.getElementById(即使我建议使用像prototype或jquery这样的库来使用$符号)。
如果你能够自己使用getElementById,那只是因为你正在使用的浏览器正在做某种技巧才能使它工作,但正确的方法是使用文档变量。
答案 3 :(得分:1)
您应该使用完整的document.getElementById()
。如果你发现它太冗长,你可以使用jQuery:
$('#' + id)
或者您可以在脚本顶部创建别名:
var byID = document.getElementById;
答案 4 :(得分:0)
我真的不知道如何解释它,但因为getElementById()在页面的html结构中找到了一个元素。有些浏览器知道默认情况下你想搜索文档,但其他浏览器需要额外的指导,因此文档。
答案 5 :(得分:0)
正确的方法确实是document.getElementById()。
它本身可能起作用的原因(推测)是,根据您使用它的位置,当前上下文实际上可能是文档对象,因此不明显地导致document.getElementById()。