【问题标题】:Javascript issue - intermittently cannot find element using getElementByIdJavascript 问题 - 使用 getElementById 间歇性找不到元素
【发布时间】:2011-05-21 21:50:58
【问题描述】:

我编写的一些 JavaScript 出现问题,只是间歇性地工作。我不太了解 DOM 中的工作原理,但我怀疑我编写的 JS 试图在 DOM 中的元素存在之前对其进行访问。我编写了 JS 以将其添加到 formassembly 表单中。我无法访问表单中的实际代码来进行更改,我只能进行 JS 更改。

这是http://www.tfaforms.com/186347表格的链接

这是我在加载文档时使用的 javascript

 window.onload=function() {

document.getElementById("submit-").style.visibility = "hidden";
document.getElementById("wfPageNextId1").value="Calculate";
document.getElementById('wfPageNextId1').setAttribute('onclick', 'Calculate2011()')

}

我收到错误消息说 wfPageNextId1 为 null 并且无法调用 setAttribute。

任何帮助将不胜感激。 提前致谢。

【问题讨论】:

    标签: javascript forms dom


    【解决方案1】:

    看起来某些 DOM 是由其他脚本动态创建的。您可以通过以下方式延迟直到元素存在:

    function initializeForm() {
       var submit = document.getElementById("submit-"),
           nextPage = document.getElementById("wfPageNextId1");
       if (submit && nextPage) {
          submit.style.visibility = "hidden";
          nextPage.value = "Calculate";
          nextPage.setAttribute('onclick', 'Calculate2011()');
       } else {
          // try again in 1 second
          setTimeout(initializeForm, 1000);
       }
    }
    
    window.onload = function() {
       initializeForm();
    };
    

    您还应该确保您没有在其他脚本中定义任何window.onload

    if (window.onload) {
       var currentOnload = window.onload;
       window.onload = function() { currentOnload(); initializeForm(); };
    } else {
       window.onload = function() { initializeForm(); };
    }
    

    【讨论】:

    • 这对我来说合乎逻辑。它正在更改计算按钮上的标签并隐藏提交按钮,但它实际上并没有进行计算,无论如何都不是在 IE 中,而是在 crom 中。任何其他建议。我不确定你对其他 window.onloads 的意思是什么?
    • 似乎也可以在 Firefox 中工作,但不能在 IE8 中工作。页面上没有 javascript 错误,因此不确定问题是什么以及为什么它没有进入Calculate2011 函数。我在函数中添加了一个警报,它没有显示在 IE 中,但它在 FF 和 Crome 中
    • 我添加了一个“安全”onload 定义的示例。从技术上讲,您可能应该测试当前onload 的类型。
    • 其他 window.onloads:其他人可能已将函数分配给 window.onload。通过自己分配它,您将删除以前的功能并且它不会加载。
    • 加载代码的窗口在 IE 中没有任何区别。仍然没有进入计算方法。另一种选择可能是对名为“tfa_TotalAnnualIncom”的第二页上的第一个输入做一些事情。该字段由单击下一页按钮后的表单组合计算得出。有什么建议可以在此字段上放置某种 onchange 事件,然后调用计算 2011 函数?
    【解决方案2】:

    检查了页面 HTML,实际上没有 ID 为 wfPageNextId1 的 HTML 元素。 您尝试访问的页面上的元素是什么?

    【讨论】:

    • 我正在尝试访问下一页按钮(我正在将按钮上的文本更改为“计算”),然后我需要在单击该按钮时调用 Calculate2011 函数
    • 我认为您正在动态添加元素,并且 document.getElementById("wfPageNextId1") 语句甚至在元素被创建并添加到 dom 之前就被调用了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 2012-02-06
    相关资源
    最近更新 更多