onclick用于IE7的setAttribute解决方法



我似乎不明白这个:

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工作,我尝试了所有我能在网上找到的解决方案,想知道是否有人能帮忙?

不要那样做。

相反,通过调用attachEvent/addEventListener添加一个事件处理程序。

我知道我有点迟到了,但这也让我很烦恼,我终于得到了。

要让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事件然后执行存储在该属性中的任何语句。

干杯。

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

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

只有ie7才会这么看。

最新更新