Reputation: 6171
I am using tinyMCE4 editor inside a Boostrap modal dialog. when I clicked on link icon it opens a new modal dialog box, It displayed fine but the input areas are not editable.
<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>
Any suggestions
Thanks in advance
Upvotes: 43
Views: 23317
Reputation: 1
tinymce not clickble input issue in bootstrap modal here is how i solved it.....
I am trying to solve it wasted many hours finally found this
First I initialise tinymce add link plugin
tinymce.init({
selector: 'textarea#addContent',
plugins: 'autoresize',
plugins: "link autolink",
placeholder: "Write content for blog...",
height: 300
});
Then to solve the clickble issue in Bootstrap modal
document.addEventListener('focusin', (e) => {
if (e.target.closest(".tox-tinymce, .tox-tinymce-aux, .moxman-window, .tam-assetmanager-root") !== null) {
e.stopImmediatePropagation();
}
});
By adding this we can use tinymce in Bootstrap modal i solved the not clickble issue for link/anchor tag hope this help
Upvotes: 0
Reputation: 11
for bootstrap 5 with versions of tinymce 5 o above, you must use this,
// Prevent Bootstrap dialog from blocking focusin
document.addEventListener('focusin', (e) => {
if (e.target.closest(".tox-tinymce-aux, .moxman-window, .tam-assetmanager-
root") !== null) {
e.stopImmediatePropagation();
}
});
by [1]: https://www.tiny.cloud/docs/integrations/bootstrap/#usingtinymceinabootstrapdialog
Upvotes: 1
Reputation: 1
For bootstrap 5 and Tinymce v4.7.9
Try
document.addEventListener('focusin', function(e) {
if (e.target.closest(".mce-window") !== null) {
e.stopImmediatePropagation();
}
});
It works for me
Upvotes: 0
Reputation: 297
To render TinyMCE instances inside Bootstrap UI dialogs, add the following code:
Bootstrap 4 or below
// Prevent Bootstrap dialog from blocking focusin
$(document).on('focusin', function(e) {
if ($(e.target).closest(".tox-tinymce, .tox-tinymce-aux, .moxman-window, .tam-assetmanager-root").length) {
e.stopImmediatePropagation();
}
});
Bootstrap 5 or above
// Prevent Bootstrap dialog from blocking focusin
document.addEventListener('focusin', (e) => {
if (e.target.closest(".tox-tinymce-aux, .moxman-window, .tam-assetmanager-root") !== null) {
e.stopImmediatePropagation();
}
});
Upvotes: 3
Reputation: 39
For all those who are using Material UI and looking for a solution : set disableEnforcedFocus = true in your Modal/Dialog... This is because by default material ui gets the focus and whaterver component you open on that it will not get the focus so you have to do it manually.
Upvotes: 3
Reputation: 21
my final workaround was to set the z-index of the appearing dialog higher than the z-index of the modal dialog. For example this would do the trick:
$(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();
}
});
pretty sure that you can set the css globally too
Upvotes: 2
Reputation: 3136
From https://github.com/tinymce/tinymce/issues/782
For jQuery UI dialogs you can do this:
$.widget("ui.dialog", $.ui.dialog, {
_allowInteraction: function(event) {
return !!$(event.target).closest(".mce-container").length || this._super( event );
}
});
This seems to be a more generalized solution that you might be able to modify for Bootstrap:
$(document).on('focusin', function(e) {
if ($(e.target).closest(".mce-window").length) {
e.stopImmediatePropagation();
}
});
Update:
For the new version of ag-grid (20.2.0), if you are using the silver theme, mce-window
was renamed to tox-dialog
so you can just change the target class.
$(document).on('focusin', function(e) {
if ($(e.target).closest(".tox-dialog").length) {
e.stopImmediatePropagation();
}
});
Upvotes: 83
Reputation: 121
The previous answer doesn't seem to work with Bootstrap v4 and TinyMCE v5. This is the modified solution should work:
$(document).on('focusin', function(e) {
if ($(e.target).closest(".tox-textfield").length)
e.stopImmediatePropagation();
});
Upvotes: 6
Reputation: 510
$(document).on('focusin', function(e) {
if ($(e.target).closest(".mce-window").length) {
e.stopImmediatePropagation();
}
});
Upvotes: 3
Reputation: 169
None of the solutions on this page seem to work for Firefox.
In chrome if I do the code below, it leads to a focus event. If I change event to the e parameter, it does not work in chrome.
The event which solves it in chrome is called Focus Event. I have not managed to find this with Firefox.
Anyone got it working in Firefox ?
$(document).on('focusin', (e) => {
if ($(event.target).closest('.mce-window').length) {
event.stopImmediatePropagation();
}
});
Upvotes: 0
Reputation: 21
The example reported at: http://fiddle.jshell.net/e99xf/13/show/light/
Works perfectly for the older versions of bootstrap (2.3.2) and jQuery (1.8.3)
I'm trying the same with the most up-to-date versions and it does not work: Bootstrap 3.3.7 / jQuery 3.2.1
Below is what I'm using (remembering that the link you entered works perfectly in the old versions of the js).
ps. I'm using the w3schools.com editor
<!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>
Upvotes: 2
Reputation: 267
In my case it was solved with the following code:
$(document).on('focusin', (e) => {
if ($(e.target).closest('.mce-window').length) {
$('.ModalHeader').attr('tabindex', '');
}
});
Upvotes: 0
Reputation: 131
Ran into this issue as well. The code provided by prabu on his JS Fiddle almost worked perfectly.
I had to make a slight modification to it so that it would work for the MoxieManager fields when they are open as well.
$(document).on('focusin', function(e) {
if ($(e.target).closest(".mce-window").length || $(e.target).closest(".moxman-window").length) {
e.stopImmediatePropagation();
}
});
This allows for editing images or renaming file paths in the MoxieManager when opened inside a Bootstrap Modal. Thanks for this.
Upvotes: 8
Reputation: 17
Try
event.stopImmediatePropagation();
instead of
e.stopImmediatePropagation();
Worked for me
Upvotes: 0