Имаме вътрешно разработен плъгин за управление на файлове/изображения/документи за 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!