这可能是我第一次在研究别人的代码时遇到javascript错误。请帮帮我。
这个网页表单应该在提交按钮时发送一封电子邮件。然而,一个javascript错误会触发,阻止它这样做:
所以这就是我点击Yes时所要跳到的地方
我找到了下面这段代码
问题是:弹出窗口中的属性"display“是否引用行标记< td >的属性”style“的值?cellColor被初始化为'ffffff',即cellColor = "ffffff";如果cellColor是undefined/null,cellColor是否会导致属性'display‘undefined/null?
valign=middle =‘左对齐样式=背景色:#“+ cellColor + ";边框:纯色1px #000000;\">”
(这是我追踪到的代码)
发布于 2011-08-28 19:30:59
我是一个公认的JS黑客;JS专家可能有更好的解决方案……
这里的问题是,只要子节点不包含具有显示属性的内联样式,divHRSupervisors.childNodes[i].style.display != 'none'
就会抛出未定义的错误。
将会工作:
<div style="display: block;">content</div>
- or -
<div style="display: none;">content</div>
将不起作用:
<div>content</div>
此外,每当使用childNodes
时,都会包含所有节点,包括文本。例如..。
'Test‘div的0个子节点:
<div id="Test"></div>
1“Test”div的子节点( div内的文本计为子节点):
<div id="Test">content</div>
“Test”目录的3个子节点(1个用于主要文本内容,1个用于内部<div>
,1个用于内部<div>
的内容):
<div id="Test">
content
<div>child content</div>
</div>
使用当前JS中的条件测试,只要遇到没有内联样式显示集的子节点,就会抛出错误。
一种解决方案是向要检查style.display
属性的任何元素添加一个公共类,然后检查是否将显示设置为none。大致是这样的:
var divs = document.getElementById("divHRSupervisors");
var children = divs.childNodes;
for (var i = 0; i < children.length; i++) {
var child = children[i];
// someClass is a class applied to all elements you want to verify
if (child.className == 'someClass') {
// check to see if there is a display property and if the display
// property does not equal none.
if (child.style.display && child.style.display != 'none') {
alert(child.nodeName);
// do other stuff.
}
}
}
您的超文本标记语言将如下所示(请注意someClass的使用):
<div id="divHRSupervisors">
<div class="someClass">hello</div>
<div class="someClass" style="display: block;">world</div>
</div>
https://stackoverflow.com/questions/7211113
复制相似问题