我在Boostrap模式对话框中使用tinyMCE4编辑器。当我点击链接图标时,它会打开一个新的模态对话框,它显示正常,但输入区域不可编辑。
<div id="editing" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<form>
<label>
<span>Description</span>
<div id="description"></div>
</label>
<form>
</div>
<script>
tinymce.init({
selector: 'div#description',
inline: false,
theme : "modern",
schema: "html5",
add_unload_trigger: false,
statusbar: false,
plugins: "link",
toolbar: "link | undo redo",
menubar: false
});
</script>
任何建议
提前致谢
答案 0 :(得分:62)
来自https://github.com/tinymce/tinymce/issues/782
对于jQuery UI对话框,您可以这样做:
$.widget("ui.dialog", $.ui.dialog, {
_allowInteraction: function(event) {
return !!$(event.target).closest(".mce-container").length || this._super( event );
}
});
这似乎是一个更通用的解决方案,您可以修改Bootstrap:
$(document).on('focusin', function(e) {
if ($(e.target).closest(".mce-window").length) {
e.stopImmediatePropagation();
}
});
更新
对于新版ag-grid(20.2.0),如果您使用银色主题,mce-window
已重命名为tox-dialog
,因此您只需更改目标类。
$(document).on('focusin', function(e) {
if ($(e.target).closest(".tox-dialog").length) {
e.stopImmediatePropagation();
}
});
答案 1 :(得分:8)
也涉及这个问题。 prabu在他的JS Fiddle上提供的代码几乎完美无缺。
我不得不对它进行一些修改,以便它们在打开时也适用于MoxieManager字段。
$(document).on('focusin', function(e) {
if ($(e.target).closest(".mce-window").length || $(e.target).closest(".moxman-window").length) {
e.stopImmediatePropagation();
}
});
这允许在Bootstrap模式中打开时在MoxieManager中编辑图像或重命名文件路径。谢谢你。
答案 2 :(得分:2)
示例报告:http://fiddle.jshell.net/e99xf/13/show/light/
适用于旧版本的bootstrap(2.3.2)和jQuery(1.8.3)
我尝试使用最新版本的相同内容并不起作用: Bootstrap 3.3.7 / jQuery 3.2.1
以下是我正在使用的内容(记住您输入的链接在旧版本的js中完美运行)。
PS。我正在使用w3schools.com编辑器
<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="http://tinymce.cachefly.net/4.0/tinymce.min.js"type=" text/javascript"></script>
</head>
<body>
<script type='text/javascript'>//<![CDATA[
$(window).load(function(){
tinymce.init({
selector: "textarea",
width: '100%',
height: 270,
plugins: [ "anchor link" ],
statusbar: false,
menubar: false,
toolbar: "link anchor | alignleft aligncenter alignright alignjustify",
rel_list: [ { title: 'Lightbox', value: 'lightbox' } ]
});
/**
* this workaround makes magic happen
* thanks @harry: http://stackoverflow.com/questions/18111582/tinymce-4-links-plugin-modal-in-not-editable
*/
$(document).on('focusin', function(e) {
if ($(event.target).closest(".mce-window").length) {
e.stopImmediatePropagation();
}
});
});//]]>
</script>
<div class="container">
<h2>Modal Example</h2>
<div class="col-sm-8">
<div class="form-group">
<br>
<label for="BL_DEF_MASCARA" class="control-label">Texto a ser exibido</label>
<br>
<div class="help-block with-errors"></div>
</div>
</div>
<br>
<!-- Trigger the modal with a button -->
<button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">Open Modal</button>
<!-- Modal -->
<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Modal Header</h4>
</div>
<div class="modal-body">
<textarea rows="4" cols="100" class="form-control" name="BL_DEF_MASCARA"></textarea>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
答案 3 :(得分:2)
对于所有使用Material UI并寻求解决方案的用户: 在您的模式/对话框中设置disableEnforcedFocus = true ... 这是因为默认情况下,材质ui会获得焦点,而您打开的任何组件都不会得到焦点,因此您必须手动进行操作。
答案 4 :(得分:0)
尝试
event.stopImmediatePropagation();
而不是
e.stopImmediatePropagation();
为我工作
答案 5 :(得分:0)
在我的情况下,它通过以下代码解决:
$(document).on('focusin', (e) => {
if ($(e.target).closest('.mce-window').length) {
$('.ModalHeader').attr('tabindex', '');
}
});
答案 6 :(得分:0)
此页面上的所有解决方案似乎都不适用于Firefox。
在chrome中,如果我执行以下代码,则会导致焦点事件。 如果我将event更改为e参数,则无法在chrome中使用。
在chrome中解决该问题的事件称为“焦点事件”。我还没有在Firefox上找到它。
有人让它可以在Firefox中工作吗?
$(document).on('focusin', (e) => {
if ($(event.target).closest('.mce-window').length) {
event.stopImmediatePropagation();
}
});
答案 7 :(得分:0)
$(document).on('focusin', function(e) {
if ($(e.target).closest(".mce-window").length) {
e.stopImmediatePropagation();
}
});
答案 8 :(得分:0)
以前的答案似乎不适用于Bootstrap v4和TinyMCE v5。 这是修改后的解决方案,应该可以工作:
$(document).on('focusin', function(e) {
if ($(e.target).closest(".tox-textfield").length)
e.stopImmediatePropagation();
});
答案 9 :(得分:0)
我最后的解决方法是将出现的对话框的z-index设置为高于模式对话框的z-index。 例如,这可以达到目的:
$(document).on('focusin', function(e) {
if ($(e.target).closest(".tox-tinymce-aux, .moxman-window, .tam-assetmanager-root, .tox-dialog").length) {
$('.tox-dialog').css('z-index', '2003');
e.stopImmediatePropagation();
}
});
非常确定您也可以全局设置css