У нас есть встроенный плагин менеджера файлов/изображений/документов для TinyMCE, который все еще переносится на jQuery. В то же время, некоторые из наших проектов, которые полагаются на наличие этих функций, должны использовать основанную на прототипе версию TinyMCE и jQuery.noConflict(). Это прекрасно работает, однако с ненавязчивой проверкой в ASP.NET MVC 3 проверка при отправке происходит до того, как запускается обратный вызов TinyMCE для копирования содержимого TinyMCE в поле формы. Можно ли подключиться к событию предварительной проверки при ненавязчивой проверке?
Ненавязчивая проверка ASP.NET MVC 3, отправка и TinyMCE
Ответы (2)
Если вы используете кнопки отправки для публикации формы, попробуйте следующее:
$("input[type='submit']").click(function () {
tinyMCE.triggerSave();
});
Если вы не используете кнопки отправки, просто подключитесь к любому событию, происходящему непосредственно перед отправкой формы, и вызовите tinyMCE.triggerSave().
triggerSave()
. Я сделал так: в tinyMCE.init({ oninit: mySpecialSubmit, ... });
и mySpecialSubmit
есть вызов triggerSave()
. Это прекрасно работает! Спасибо!
- person Cymen; 07.02.2011
$(document).ready(function(){})
.
- person John Boker; 29.05.2012
Другой способ сделать это, который дает вам больше контроля, — это инициализация TinyMCE. Это работает хорошо, за исключением одного случая: последний выходной экземпляр TinyMCE не запускает событие onDeactivate внутри TinyMCE (оно срабатывает только при переходе к другому экземпляру TinyMCE). Итак, вот способ обойти это — пока он работает хорошо, но YMMV.
Примечание. Я бы использовал это в сочетании с принятым ответом. Этот код запускает проверку, поскольку контент редактируется в TinyMCE.
tinyMCE.init({
...
setup: ValidationTinyMceSetup
});
И наш метод настройки:
function ValidationTinyMceSetup(editor) {
var $textarea = $('#' + editor.editorId);
// method to use to save editor contents to backend input field (TinyMCE hides real input and syncs it up
// with values on form submit) -- we need to sync up the hidden input fields and call the valid()
// method from jQuery unobtrusive validation if it is present
function save(editor) {
if (editor.isDirty) {
editor.save();
var $input = $('#' + editor.editorId);
if (typeof $input.valid === 'function')
$input.valid();
}
}
// Save tinyMCE contents to input field on key/up down (efficiently so IE-old friendly)
var typingTimerDown, typingTimerUp;
var triggerDownSaveInterval = 1000; // time in ms
var triggerUpSaveInterval = 500; // time in ms
editor.onKeyDown.add(function (editor) {
clearTimeout(typingTimerDown);
typingTimerDown = setTimeout(function () { save(editor) }, triggerDownSaveInterval);
});
editor.onKeyUp.add(function () {
clearTimeout(typingTimerUp);
typingTimerUp = setTimeout(function () { save(editor) }, triggerUpSaveInterval);
});
// Save tinyMCE contents to input field on deactivate (when focus leaves editor)
// this is via TAB
editor.onKeyDown.add(function (editor, event) {
if (event.keyCode === 9)
save(editor);
});
// this is when focus goes from one editor to another (however the last one never
// triggers -- need to enter another TinyMCE for event to trigger!)
editor.onDeactivate.add(function (editor) {
save(editor);
});
}
Наконец, бонусный пункт, который совершенно не связан с этим: вы можете добавить счетчик символов, включив эту функцию в исходный код JavaScript:
function CharacterCountDisplay(current, max) {
if (current <= max) {
return current + ' of ' + max + ' characters max';
}
else {
return '<span style="color: red;">' + current + '</span> of ' + max + ' characters';
}
}
И в приведенном выше методе ValidationTinyMceSetup
добавьте:
// check for character count data-val
var character_max = $textarea.attr('data-val-lengthignoretags-max');
if (typeof character_max === 'undefined' || character_max === false) {
character_max = $textarea.attr('data-val-length-max');
}
if (typeof character_max !== 'undefined' && character_max !== false) {
var character_count = function (editor) {
var currentLength = $(editor.getDoc().body).text().length;
editor.dom.setHTML(tinymce.DOM.get(editor.id + '_path_row'), CharacterCountDisplay(currentLength, character_max));
};
// on load show character count
editor.onInit.add(character_count);
// while typing update character count
editor.onKeyUp.add(character_count);
}
Чтобы использовать, просто добавьте data-val-length-max="250"
к тегу textarea или тому, на чем вы используете TinyMCE!