Почему мой TinyMCE скрытый textarea действует?
у меня около 7 textarea
s на веб-странице, все они являются редакторами rich text с помощью TinyMCE. Однако при загрузке страницы виден только 1 из них, а остальные скрыты. Пользователь может щелкнуть ссылку "Показать", которая будет отображать оставшиеся текстовые области один за другим.
тем не менее, у меня странная проблема. Все textarea
s настроены следующим образом:
<textarea cols="40" rows="20"></textarea>
, только textarea
отображается при загрузке страницы в полном размере, который я хочу. Остальные textarea
s очень маленькие, когда я им показываю. Поэтому я думаю, что, возможно, они не отображаются, потому что они скрыты при загрузке страницы.
как я могу исправить это?
8 ответов
попробуйте добавить CSS в скрытые текстовые области.
например, использовать
<textarea cols="40" rows="20" style="width: 40em; height: 20em"></textarea>
Я думаю, что я столкнулся с этим, где CSS TinyMCE переопределяет некоторые из поведения CSS по умолчанию. В итоге мне пришлось "переопределить" его и в конечном итоге отредактировать css-страницы TinyMCE.
Я думаю, что это ошибка MCE или, по крайней мере, функция, которой не хватает MCE.
Так как я хотел стиль моего поля ввода в CSS, а не в HTML (yuck), я попытался
visibility: hidden;
вместо
display: none;
и все снова работало.
Я считаю, что последний заставляет элемент не занимать места, который запускает код MCE, который определяет ширину и высоту элемента.
при загрузке TinyMCE с помощью jQuery эта проблема может быть решена следующим образом:
1-в текстовом поле укажите высоту в атрибуте inline style:
<textarea style="height:200px;" class="tinymce" name="myfield"></textarea>
2-добавление функции обратного вызова при создании экземпляра редактора TinyMCE. например,tinymceLoaded
$('textarea.tinymce').tinymce({
// Location of TinyMCE script
script_url : 'PATH_TO_TINYMCE.js',
// General options ...
// Theme options...
// callback function
init_instance_callback : "tinymceLoaded"
});
3-Установите высоту ваших редакторов в функции tinymceLoaded:
function tinymceLoaded(inst){
// get the desired height of the editor
var height = $('#' + inst.editorId).height();
// when the editor is hidden, the height calculated is 0
// Lets use the inline style text to solve this problem
if(height == 0){
height = $('#' + inst.editorId).css('height'); // 200px
height = height.replace(/[^0-9]/g, ""); // remove all non-numeric characters to isolate the '200'
}
// set the height of the hidden TinyMCE editor
$('#' + inst.editorId + '_ifr').css({height: height + 'px'});
}
Не имея несколько больше информации о вашей фактической настройке и как вы делаете vaious дисплей/скрыть функциональность трудно дать окончательный ответ. Я могу выбросить несколько общих мыслей, хотя:
- правильно ли они отображаются, когда вы не скрываете их при загрузке страницы? Это дало бы определительный ответ на то, в какой момент происходит ошибка.
- при переключении представления textarea вы можете explicity установить атрибуты строки/col в то же время время?
- можете ли вы использовать css (возможно, с !важно) установить ширину и высоту textarea, чем проверить, имеет ли это эффект?
с TinyMCE внутри скрытого div не отображаются как включено, когда мы помещаем div видимым, slolife ответ помог мне:
попробуйте позвонить в tinyMCE.инициализация.(..) после отображения содержащего div.
у меня была та же проблема, когда высота скрытых элементов управления textarea, которые были преобразованы в Редакторы TinyMCE, была слишком маленькой. Настройка visibility
to none
работал, но оставляет большое пустое пространство на своем месте.
следующее решение работало хорошо для меня:
- не скрывайте элементы управления textarea изначально при загрузке страницы
- вместо этого установите всю конфигурацию init вашего TinyMCE следующим образом:
tinyMCE.init({ ... init_instance_callback : "onInstanceInit" });
- In ваш
onInstanceInit
функция, Скрыть инициализированный редактор TinyMCE динамически - если вы покажете этот редактор после этого, высота будет нормальной снова так же, как она никогда не была скрыта
другой причиной скрытой вещи является удаление элементов из dom с инициализацией tinymce на них. Сначала вам нужно удалить tinymce из этого элемента, чтобы избежать странного поведения при инициализации новых элементов tinymce.
вот например :
removeElementWithTinymce = function(elementToRemove){
var parent = elementToRemove.parentNode;
tinymce.remove(elementToRemove.getAttribute('id'));
parent.removeChild(elementToRemove);
};
вот и все.
Если вы используете производственную версию TinyMCE, вы, вероятно, забыли скопировать папки, которые tinymce.минута.js нуждается. У вас должны быть папки Лэнг, Плагины, скины и темы в той же папке, что и ваш tinymce.минута.файл js.