仅在IE9+;中调用jquery document.ready和window.load后,getElementById不在DOM中;

仅在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

当我运行页面时,有时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文件中。我确实尝试过将它移动到一个外部文件,只是为了彻底检查,但并没有达到预期的效果

所以总而言之,

  • 为什么jQueryAPI不起作用?及
  • 为什么将javascript向下移动(或移动到最后)也不起作用
  • 头部内部的Javascript片段:

    //        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中遇到了类似的问题。您尝试过兼容模式吗?