最近用CodeMirror2作后台的模板编辑器,在IE9、Firefox下面没有问题。到了IE7、IE8下面,textarea里面的代码就显示不出来了。搜索了好多,终于找到原因。
原来出错的代码如下:
<
p
style
="margin-top:0;"
>
< asp:TextBox ID ="txtContent" runat ="server" TextMode ="MultiLine" Height ="450" Width ="98%" ></ asp:TextBox >
</ p >
< asp:TextBox ID ="txtContent" runat ="server" TextMode ="MultiLine" Height ="450" Width ="98%" ></ asp:TextBox >
</ p >
出错的原因应该是IE7、IE8中的P不支持innerHTML。CodeMirror的作者也发现了这个问题,相关链接:
https://github.com/marijnh/CodeMirror2/issues/215
https://github.com/marijnh/CodeMirror2/commit/4886415d6054571f92fa4d5601ebe7d601e952ab
try { stringWidth("x"); }
catch (e) {
if (e.message.match(/runtime/i) || e.message.match(/运行时/i) )
e = new Error("A CodeMirror inside a P-style element does not work in Internet Explorer. (innerHTML bug)");
throw e;
}
catch (e) {
if (e.message.match(/runtime/i) || e.message.match(/运行时/i) )
e = new Error("A CodeMirror inside a P-style element does not work in Internet Explorer. (innerHTML bug)");
throw e;
}
把textarea外层的p改成div,即可正常:
<
div
style
="margin-top:0;"
>
< asp:TextBox ID ="txtContent" runat ="server" TextMode ="MultiLine" Height ="450" Width ="98%" ></ asp:TextBox >
</ div >
< asp:TextBox ID ="txtContent" runat ="server" TextMode ="MultiLine" Height ="450" Width ="98%" ></ asp:TextBox >
</ div >