【问题标题】:Linking javascript error with hard-coded html in C# string builder object在 C# 字符串生成器对象中将 javascript 错误与硬编码的 html 链接起来
【发布时间】:2011-08-26 22:22:14
【问题描述】:

这可能是我在研究别人的代码时第一次不得不处理 javascript 错误。请帮帮我。

当提交一个按钮时,这个网络表单应该发送一封电子邮件。但是,会触发一个 javascript 错误,阻止它这样做:

所以当我点击“是”时,这就是我要到的地方

我追查到下面这段代码

问题是:弹窗中的属性“display”是指行标签

的属性'style'的值吗? cellColor 初始化为 'ffffff',即 cellColor = "ffffff";如果 cellColor 曾经是 undefined/null,cellColor 会导致属性 'display' undefined/null 吗?

align='left valign=middle style=background-color: #" + cellColor + ";边框:实心 1px #000000;\">"

(这是我查到的代码)

【问题讨论】:

    标签: c# javascript


    【解决方案1】:

    我是公认的 JS hack; JS 大师可能有更好的解决方案...

    这里的问题是,只要子节点不包含具有显示属性的内联样式,divHRSupervisors.childNodes[i].style.display != 'none' 就会抛出未定义的错误,即,

    有效:

    <div style="display: block;">content</div>
    - or -
    <div style="display: none;">content</div>
    

    不会工作:

    <div>content</div>
    

    此外,无论何时使用childNodes,都会包含所有节点,包括文本。比如……

    “测试”div 的 0 个子节点:

    <div id="Test"></div>
    

    'Test' div 的 1 个子节点(div 内的文本算作子节点):

    <div id="Test">content</div>
    

    'Test' div 的 3 个子节点(1 个用于正文内容,1 个用于内部 &lt;div&gt; 和 1 个用于内部 &lt;div&gt; 的内容):

    <div id="Test">
      content
      <div>child content</div>
    </div>
    

    在你当前的 JS 中使用条件测试,任何时候遇到不具备显示集内联样式的子节点,都会抛出错误。

    一种解决方案是向您要检查style.display 属性的任何元素添加一个公共类,然后检查显示是否设置为无。大致如下:

    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.
            }
        }
    }
    

    您的 HTML 将如下所示(注意 someClass 的使用):

    <div id="divHRSupervisors">
        <div class="someClass">hello</div>
        <div class="someClass" style="display: block;">world</div>
    </div>
    

    【讨论】:

    • 但是你能告诉我你在嵌套 if 语句的条件中的真正含义吗? (第二个 If) 导致 && 前后看起来一样。提前致谢!
    • if (child.style.display) 将检查显示属性是否存在。然后if (child.style.display != 'none') 将检查显示属性的值是否不等于none。在检查值之前需要检查显示属性是否存在,否则会抛出异常。这正是您发布的JS抛出错误的原因,re:childNodes包含甚至没有显示属性的元素。
    猜你喜欢
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2019-07-24
    • 2020-07-31
    相关资源
    最近更新 更多