仅在IE9+;中调用jquery document.ready和window.load后,getElementById不在DOM中;
当我运行页面时,有时getElementById调用会找到元素,有时则不会。当然是时间问题。这只发生在IE9中,不在IE兼容模式(7或8)中,也不发生在任何其他浏览器(Firefox、Opera、Safari和Chrome)中。无法创建提琴,因为当我将页面向下剥离以放入提琴并对其进行沙箱处理时,问题就消失了。我的getElementById javascript调用位于head部分,据我所知,该部分将无法在该点找到元素,除非您在DOM就绪或窗口onload状态下等待它们。我尝试将getElementById javascript包装到jquery的$(document).ready函数中,但没有任何效果。我还尝试将其包装到jquery的$(window).load函数中,我认为该函数必须工作,但也没有效果 如果我尝试用这个window.onload解决方案()等待元素,我会工作并找到它。那么为什么不使用jquery的document.ready或window.load API呢 我确实尝试过在页面中为它引用的标记在html之后向下移动脚本,但是没有任何效果,因为问题仍然存在,并且它找不到元素。我也把它移到了最后,但也没有效果。我对这个特殊的结果感到困惑,因为我认为将javascript移到末尾会使这些元素可用(或者我读到了),但情况似乎并非如此。有人知道这是为什么吗 我之前确实提到过,这只发生在IE9中。此外,只有在初始页面加载时才会出现问题,任何页面刷新都会使问题消失。我猜可能是因为缓存 我使用的是asp.NET4.0,这并不重要(至少我认为是这样)。javascript位于节中html节上方的.aspx页面中,而不是外部js文件中。我确实尝试过将它移动到一个外部文件,只是为了彻底检查,但并没有达到预期的效果 所以总而言之,仅在IE9+;中调用jquery document.ready和window.load后,getElementById不在DOM中;,dom,internet-explorer-9,onload,getelementbyid,document-ready,Dom,Internet Explorer 9,Onload,Getelementbyid,Document Ready,当我运行页面时,有时getElementById调用会找到元素,有时则不会。当然是时间问题。这只发生在IE9中,不在IE兼容模式(7或8)中,也不发生在任何其他浏览器(Firefox、Opera、Safari和Chrome)中。无法创建提琴,因为当我将页面向下剥离以放入提琴并对其进行沙箱处理时,问题就消失了。我的getElementById javascript调用位于head部分,据我所知,该部分将无法在该点找到元素,除非您在DOM就绪或窗口onload状态下等待它们。我尝试将getEleme
// addLoadEvent(setupstuff);
// function addLoadEvent(func)
// {
// var oldonload = window.onload;
// if (typeof window.onload != 'function')
// {
// window.onload = func;
// }
// else
// {
// window.onload = function ()
// {
// if (oldonload)
// {
// oldonload();
// }
// func();
// };
// }
// }
var txtLocation = '<%=txtLocation.ClientID%>';
// JQuery plugin - JQueryLive (waits for element)
$('#' + txtLocation).livequery(function ()
{
setupstuff();
});
//$(document).ready(function () //didn't work
//$(window).load(function() //didn't work
function setupstuff()
{
// search text watermark toggling
var hasWatermark = $('#' + txtLocation).hasClass('txtLocationWatermark');
var searchText;
if (document.getElementById(txtLocation))
{
searchText = document.getElementById(txtLocation).value;
}
else
{
alert('Element ' + txtLocation + ' not found in DOM!');
return;
}
//var searchText = $('#' + txtLocation).val(); //doesn't work either
//addLoadEvent(setupstuff);
//函数addLoadEvent(func)
// {
//var oldonload=window.onload;
//if(typeof window.onload!=“函数”)
// {
//window.onload=func;
// }
//否则
// {
//window.onload=函数()
// {
//if(oldonload)
// {
//oldonload();
// }
//func();
// };
// }
// }
var txtLocation='';
//JQuery插件-JQueryLive(等待元素)
$('#'+txtLocation).livequery(函数()
{
setupstuff();
});
//$(文档).ready(函数()//不起作用
//$(窗口).load(函数()//不起作用
函数setupstuff()
{
//搜索文本水印切换
var hasWatermark=$('#'+txtLocation).hasClass('txtLocationWatermark');
var搜索文本;
if(document.getElementById(txtLocation))
{
searchText=document.getElementById(txtLocation).value;
}
其他的
{
警报('DOM!'中未找到元素'+txtLocation+');
返回;
}
//var searchText=$('#'+txtLocation).val();//也不起作用
升级到最新版本的jQuery修复了这一问题,因为之前的一个版本(jQuery 1.7.?)中有一个.ready()函数的错误,该错误记录在发行说明中。我在PowerShell中遇到了类似的问题。您尝试过兼容模式吗?