0

每次我在 i.e10 中运行页面时,JavaScript 调试器窗口都会出现并显示“样式”的未定义错误。我正在尝试 JavaScript 方式而不是 jQuery。

事实证明很麻烦...

var displayPackets = document.getElementById('pnl_emailFtp');
// set style to 'display:none;'
displayPackets.style.display = "none";

var smlPkt = document.getElementById('small-packet');
var lrgPkt = document.getElementById('large-packet');

// Shows the 'panel' where the 'small/Large' pkts are.
var radButton = document.getElementsByName('secureData');
// Check radio button has been clicked and show 
// Small/Large packet boxes.
if (radButton.checked = true) {
    displayPackets.style.display = "block";
} else {
    displayPackets.style.display = "none";
}

难道我做错了什么?

4

2 回答 2

1

也许错误在

var displayPackets = document.getElementById('pnl_emailFtp');

如果由于某种原因displayPackets不是 DOM 元素,您可能会收到您评论的错误。

如果文档中有效地存在具有 id 的元素pnl_emailFtp,则可能您正试图在文档 DOM 加载或准备好之前检索对它的引用。在这种情况下,您可以尝试:

window.load = function(){ ... }

就好像你在使用:

$.ready(function(){ ... }).

另请参阅此问答此问答以了解其他选项。

在 IE 上调试奇怪错误的提示

使用内置alert()函数。它会停止 JavaScript 执行,直到它被接受,因此它可以用作断点。

程序如下:

  1. alert( 'ok' );在脚本的第一行(或至少在您认为有问题的行上方)放置一个。

    alert( 'ok' );
    var displayPackets = document.getElementById('pnl_emailFtp');
    
  2. 加载您的页面并...

    1. 如果显示警报,请将其放到下一行并重复2

      var displayPackets = document.getElementById('pnl_emailFtp');
      alert( 'ok' );
      displayPackets.style.display = "none";
      
    2. 如果未显示警报,请将其放到上一行并重复2

  3. 当您遇到2.12.2无限重复的行时,您会得到导致问题的代码行。

于 2013-06-18T13:46:24.117 回答
1

尝试将您的代码放在window.onload处理函数中,如下所示:

window.onload = function () {
  // Your code comes here
};

或者将脚本放在结束body标记之前。

当您在 jQuery 中获得此代码段时$(document).ready(...),执行会延迟,直到所有 DOM 元素都可用。当您head在解析期间执行代码时,body其及其内容尚不存在。

于 2013-06-18T13:55:57.333 回答