Press "Enter" to skip to content

FCKeditor在隐藏层中的问题

最近发表文章的部分一直有个很奇怪的现象。论坛的发表文章分成几种类型,普通贴、金币贴、回复可见贴等等,有几种类型选择以后需要输入被隐藏的内容,这一部分是在一个单独的输入框里面的。因此,在这一个页面上就放了两个Textarea,用两个FCKeditor实例来替换。下面的一个是放在隐藏层里的,点击那几个类别的时候,才把这个层显示出来。结果就出现了很奇怪的问题。

第一、Firefox用户在第二个编辑器里面无法点击进去,也就是根本无法把光标置于这个编辑器内,无法输入文字。后来发现点击源代码按钮两次切换一下就好了。到网上搜索了一下,有不少有这个问题,但是似乎是比较早的版本的问题,新的应该已经没有问题了,而且有人提供了修改方案也没有作用。第二,在IE下第二个编辑器是可以输入的,但是这个编辑器刚显示出来的时候高度是预设的400,只要用鼠标在里面一点,高度立马缩小成只有一行,但是随着内容的输入,编辑器可以自动扩展,删除内容的时候,又会缩小成只有一行。(在Firefox下也会缩小成一行)

研究了很长时间,终于找到问题的源头,就是这个隐藏层的问题。如果把这个编辑器设成默认显示的话,这两个问题就都不存在了。那么剩下的问题就是何时隐藏何时显示了。试了一下在编辑器ReplaceTextarea() 的函数之后再把层隐藏起来,没有效果。似乎这个函数执行的过程比较慢,而浏览器并不等待它执行完毕,直接就调用了后面的隐藏过程,所以,在页面显示的时候,是看不到第二个编辑器的渲染过程的。再想了一下,似乎只有一个办法了,就是在层显示出来之前,不去替换编辑器,当使层显示出来的时候,再调用ReplaceTextarea() 函数。

最终测试下来效果良好,总算解决了这个问题。具体方法,把第二个编辑器的初始化代码移到一个单独的函数中,在调用第二个编辑器所在层的show()方法以后,再调用这个初始化函数。为了避免多次初始化编辑器,设一个全局变量用来标识是否已经初始化过。

10 Comments

  1. limimg 2008年06月18日

    Firefox用户在第二个编辑器里面无法点击进去,我有六个编辑器,请问怎么解决,请问能再详细点吗?谢谢!

  2. 非鱼 2008年06月18日

    你的六个编辑器是放在隐藏层里面的吗?我那两个编辑器如果打开页面的时候直接全部显示出来是没问题的。
    如果是放的隐藏层里,就是我提到的解决方案,不要在页面加载的时候初始化编辑器,而是在显示出隐藏层以后再初始化编辑器。也就是把new FCKeditor的过程放到一个函数里面去,在显示隐藏层的时候调用。

  3. 西米 2008年07月15日

    请问以下,我有一个编辑器和一个calendar,(这个日历是js写的),当我点出那个日历的时候,只要日历显示的位置和编辑器的位置有重叠,编辑器就会消失,这是为什么??
    而当我把 日历移到编辑器的范围之外就编辑器就能显示出来

  4. 非鱼 2008年07月15日

    编辑器是显示在一个IFrame里面的,你那个日历控件可能在显示的时候把它遮挡的IFrame和Select控件都给隐藏了。这个属于无解的问题,要是不隐藏,日历控件就会被挡住。

  5. 西米 2008年07月15日

    问题是:编辑器的显示的用标签显示的 没有显示在 iframe里面



    ${bulletins.content==null?””:bulletins.content}

    日历则是


    这样调用的js(那个js是下载的)

  6. 非鱼 2008年07月15日

    不是看调用的代码,要看生成的代码。FCKEditor的是通过JS生成一个IFrame来放自己的代码的。

  7. 西米 2008年07月15日

    嗯 似乎有点明白了,也就是说没有解决办法了。

  8. 西米 2008年07月15日

    非常感谢!

  9. 匿名 2008年09月21日

    我也遇到了这样的问题,在一个页面中使用了两个ReplaceTextarea()函数,可是只有最后的一个显示FCKeditor组件,而第一个显示的是文本域Textarea
    请问有什么解决办法啊,麻烦把代码贴出来,谢谢

  10. 非鱼 2008年09月21日

    解决方法就是不要在页面的onLoad函数里替换它,而是在点击展开这个层的时候的函数里来替换它。

Comments are closed.