【问题标题】:onclick setAttribute workaround for IE7IE7 的 onclick setAttribute 解决方法
【发布时间】:2011-06-14 17:00:17
【问题描述】:

我似乎无法理解:

top.document.getElementById("clickThis").setAttribute("onclick", "tinyMCE.execCommand('mceInsertContent',false,'<div style=\"width: 600px; margin: 0 auto .5em;\" class=\"wp-caption alignnone\"><a href=\"<?php echo $full_image_path; ?>\" rel=\"lightbox\" title=\"View in lightbox\"><img class=\"alignnone\" src=\"<?php echo $full_width; ?>\" alt=\"<?php echo $value; ?>\" /></a><p class=\"wp-caption-text\"><?php echo $get_image->caption; ?></p></div>');");

为了在 IE7 中工作,我尝试了所有可以在网上找到的解决方法,想知道是否有人可以提供帮助?

【问题讨论】:

    标签: javascript internet-explorer-7 setattribute


    【解决方案1】:

    不要那样做。

    改为add an event handler 调用attachEvent / addEventListener

    【讨论】:

      【解决方案2】:

      我知道我来晚了,但这也让我很烦,我终于明白了。

      要让 IE 在 onclick 事件期间执行动态构建的代码,请执行以下操作:

      1. 为所有其他浏览器编写代码:element.setAttribute( "onclick", object.varName + "method( " + var + " )" );
      2. 使用自定义属性来保存动态语句:element.setAttribute("exec", object.varName + "method(" + var + ")");
      3. 创建一个匿名函数以在单击元素时执行存储在我们自定义属性中的语句: element.onclick = function(){ eval( this.exec ); };

      这种方法适用于在 IE7 浏览器模式下运行的 IE9 以及当前版本的 Chrome 和 Firefox。

      有几点需要注意:

      首先,就我而言,我需要执行一个对象方法。为此,我需要知道对象的 var 名称,我在启动类时将其设置为属性。所以 object.varName 属性是我在运行时代码中创建和设置的。

      其次,“exec”不是标准属性,这就是为什么它可以保存我要执行的字符串的原因。但是,只要您使用非标准属性,您就可以随意调用它。

      第三,这就是它起作用的原因:IE,或者至少是 IE7,只会让您将 onclick 事件设置为包含匿名函数。如果你分配一个对象的方法或一个包含 一个函数,该函数在设置了 onclick 属性时执行,而不是在实际单击元素时执行。就我而言,我无法构建匿名函数,因为变量在运行时会发生变化。因此,我动态构建了一个语句,然后将其存储在元素的属性中。然后 onclick 事件会执行存储在该属性中的任何语句。

      干杯。

      【讨论】:

        【解决方案3】:

        当我这样做时,工作就像做梦一样:

        if(navigator.userAgent.indexOf("MSIE 7.0") != -1){
        
            document.getElementById("pb").onclick = function(){ eval( this.onClick ); };
        }
        

        这样只有 ie7 才会看到它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-21
          • 1970-01-01
          • 2016-05-10
          • 2012-05-26
          • 2014-04-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多