更新:在posting on the TinyMCE forum之后(我在提供赏金之前应该做的事情)可能会解决主要问题,但我对其他问题仍然非常开放如何禁用可调整大小的行为(帖子末尾的数字2和3)。
我无法在 IE8 (不是其他版本)中使用TinyMCE保存内容。在IE中,编辑器中的某些元素在每个角落都有句柄和可拖动的“边框”,当您专注于开始编辑时,可能会出现条纹边框:
如果我在粗边框仍然可见时提交表单(图像中的状态3),表单将不会保存内容。我必须单击编辑器的另一个区域才能使所有边框消失,然后提交表单。
我正在使用TinyMCE 3.4.6 jQuery包,我在其他浏览器中没有这种行为。
我已经将问题的原因缩小了很多,并找到了一些东西:
使用IETester时,当来自活动元素的焦点丢失时,我收到的声明为'length' is null or not an object
;即当您点击TinyMCE编辑器外的任何地方时。
我没有在真正的IE8安装中看到这个错误(我目前无法访问的东西),但是:考虑到上面提到的问题和解决方法,这有点道理。我不得不点击提交两次,并解除警告以使表格在IETester中发布。
我创建了一个实时bare-bones demo,以下是它的内容:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript" src="tiny_mce/jquery.tinymce.js"></script>
<script type="text/javascript">
$(function() {
$('textarea.tinymce').tinymce({
script_url : 'tiny_mce/tiny_mce.js',
content_css : 'test.css'
});
});
</script>
<form action="" method="post">
<textarea class="tinymce" name="content"><p>Testing</p></textarea>
<button type="submit">Submit</button>
</form>
/* Content of test.css */
p {
min-height: 24px; /* this line makes the handles appear */
background-color: #f00;
color: #fff;
}
$_POST
数据一起发送。如果您要单击编辑器中的其他区域,删除粗边框,则 将正常发送。 重要提示:如何在不需要用户解决方法的情况下让表单发布已编辑的文本?
更新:这似乎是在TinyMCE首席开发人员的recent commit中解决的。我仍然无法在真正的IE8安装上进行测试,但这有效并且使IETester中的错误无效。
不太重要:有没有办法完全阻止或移除手柄和可拖动的边缘?我猜这是关于IE实现contentEditable
而不是TinyMCE的问题,甚至可能不是导致问题的原因。
答案 0 :(得分:2)
除了等待新IE之外,我不知道问题3的任何解决方案。在Windows8下的最新IE10中,他们声称它是固定的https://connect.microsoft.com/IE/feedback/details/576040/resizing-handles-in-contenteditable-elements-are-placed-over-any-other-element(需要登录),但他们的解决方案是始终隐藏调整大小句柄。好吧,有一个解决方案,这是为了避免在编辑时使用任何样式强制IE的内部hasLayout标志
答案 1 :(得分:1)
好吧这是一个奇怪的IE8错误。我找到了一个解决方法,但仍然需要解决这个问题。
我发现在提交表单之前你可以将textarea的内容设置为textarea的内容......听起来很奇怪,但调用.html()
会触发一个返回正确html的tinymce事件。
$("button").click(function() {
$("textarea").html($("textarea").html());
});
答案 2 :(得分:1)
显然你无法解决第二个问题。
这篇文章很好地解释了它:除非删除使它们出现的属性,否则不能删除它们。 http://www.satzansatz.de/cssd/onhavinglayout.html (搜索“删除”一词)
你仍然可以通过在容器(具有contenteditable的元素)上使用它来改善一点:
function fixIE( editableContainer ) {
editableContainer.onmousedown = function ( e ) {
e = e || event;
( e.target || e.srcElement ).focus( );
};
editableContainer.onresizestart = function ( e ) {
e = e || event;
if ( e.stopPropagation ) {
e.stopPropagation( );
}
e.cancelBubble = true;
if ( e.preventDefault ) {
e.preventDefault( );
}
e.returnValue = false;
return false;
};
}
(你的元素不一定是div) onmousedown将允许您仅单击一次以进入可以编写的状态。 onresizestart将阻止调整大小。
答案 3 :(得分:0)
如果你给它hasLayout,它应该工作。尝试缩放:1;