代码之家  ›  专栏  ›  技术社区  ›  CSchulz cL83

读取JavaScript onClick函数体并将其用于另一个onClick

  •  1
  • CSchulz cL83  · 技术社区  · 16 年前

    我直接用它试过 onClick=img.onClick onClick=new Function(img.onClick)

    if (img.onclick != undefined)
    {
        var imgClick = img.onclick;
        strNewHTML = strNewHTML + " onMouseOver=\"this.style.background"
        + "= '#cecece'\" onMouseOut=\"this.style.background = ''\" onclick=\""+imgClick+"\">";
    }
    

    有人能帮我吗?

    谢谢!

    1 回复  |  直到 16 年前
        1
  •  4
  •   bobince    16 年前
    span.onclick= img.onclick;
    

    JavaScript区分大小写,DOM事件处理程序属性都是小写的。

    编辑:

    if (img.onclick != undefined) {
        strNewHTML = strNewHTML + " onMouseOver=\"this.style.background"
        + "= '#cecece'\" onMouseOut=\"this.style.background = ''\" onclick=\""+imgClick+"\">";
    }
    

    onclick DOM属性包含 function 对象。 无法将对象添加到字符串中(如果你打电话给他们,他们会变成你所得到的 somefunction.toString()

    单击 属性添加到HTML中,您必须使用 span.getAttribute('onclick') 方法。 getAttribute 所以你不得不求助于 span.getAttributeNode('onclick').value . 然后,当您将它添加到HTML字符串中时,您必须对它进行HTML转义,以便 < , & 和 " 里面的人物都是 &lt;

    然而,这真的很难看; . 实际上,HTML字符串抛出总是很糟糕。尤其是当你在一个JavaScript字符串中的HTML中有JavaScript代码时。转义规则变得疯狂,如果你在转义来自用户输入的内容时出错,你就给自己造成了一个跨站点脚本安全漏洞。

    不管你喜欢什么功能。如。:

    var span= document.createElement('span');
    if (img.onclick)
        span.onclick= img.onclick;
    span.onmouseover= function() {
        this.style.background= '#CECECE';
    };
    span.onmouseout= function() {
        this.style.background= '';
    };
    
    someparentelement.appendChild(span);
    

    :hover 规则,可维护性。唯一需要帮助的浏览器 :悬停