【问题标题】:Why is this javascript not working?为什么这个 javascript 不起作用?
【发布时间】:2009-11-27 12:58:15
【问题描述】:

这是问题的延续:

innerHTML working in FF but not in IE!

上述问题已解决[thanx to pygorex1]。但我想知道为什么下面的代码 sn-p 不起作用。

if (window.addEventListener){   
    window.addEventListener('load', addDateFormatInfo, false);  
    window.addEventListener('load', loadNewElements, false);    
} else if (window.attachEvent){ 
    window.attachEvent('onload', addDateFormatInfo);    
    window.attachEvent('onload', loadNewElements);
}

function loadNewElements(){
    document.createElement("showDateFormat");
}

function addDateFormatInfo(){
    var dateFormatHolder = document.getElementsByTagName("showDateFormat");     
    if ( dateFormatHolder ){            
        for ( i = 0 ; i < dateFormatHolder.length; i++ ){
                dateFormatHolder[i].innerHTML = '<div class="infoSmall" ><span>(mm/dd/yyyy)</span></div>';                                               
        } 
    }
}

前提是它在 FF 中工作,但在 IE 中不工作
另外,如果不是创建一个新方法 loadNewElements 并附加它来加载事件,如果我将直接在我的 javascript [不是任何方法] 中编写 document.createElement("showDateFormat");,那么代码将按预期工作 [在 IE 和 FF 中] .为什么会这样?

【问题讨论】:

    标签: javascript html events


    【解决方案1】:

    您需要在其他方法之前调用 loadNewElements

    如果不行就这样写:

    if (window.addEventListener){   
        window.addEventListener('load', addDateFormatInfo, false);  
        //window.addEventListener('load', loadNewElements, false);    // Don't need this for non-IE browsers
    } else if (window.attachEvent){ 
        loadNewElements(); // Will always be executed before the other one
        window.attachEvent('onload', addDateFormatInfo);    
    }
    

    【讨论】:

    • 我已经放置了window.addEventListener('load', loadNewElements, false);,如果我在loadNewElements 方法中保留alert,它会在addDateFormatInfo 之前执行。即使在 IE 中它也无法正常工作
    • 您是否将“window.attachEvent('onload', loadNewElements);”放在另一个 attachEvent 调用之前?
    • @Fabien:看代码,我已经在附加“addDateFormatInfo”之后放置了“loadNewElements”,所以loadNewElements总是在addDateFormatInfo之前执行
    • 为什么要先于另一个执行?它是在...之后附加的。您是否尝试交换这两行?
    • 好吧,文档非常明确:“如果您将多个函数附加到同一对象上的同一事件,则在调用对象的事件处理程序后立即以随机顺序调用函数。” msdn.microsoft.com/en-us/library/ms536343%28VS.85%29.aspx 使用 attachEvent 时,您不知道哪个在另一个之前执行。
    【解决方案2】:

    我会尝试这样做:

    if (window.addEventListener){   
      window.addEventListener('load', function() {loadNewElements(); addDateFormatInfo()}, false);  
    } else if (window.attachEvent){ 
      window.attachEvent('onload', function() {loadNewElements(); addDateFormatInfo()});    
    }
    

    【讨论】:

    • 我会试试这个,到时候它是 +1 ;)
    猜你喜欢
    • 2012-02-22
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    相关资源
    最近更新 更多