Я использую плагин Edit-in-Place JQuery, JEditable: http://www.appelsiini.net/projects/jeditable.
Я бы хотел использовать TinyMCE при редактировании, поэтому я нашел дополнительный скрипт для его работы: http://sam.curren.ws/index.cfm/2008/6/12/jEditable-TinyMCE-Plugin.
Проблема, с которой я столкнулся, заключается в том, что JEditable или TinyMCE аварийно завершают работу в первый раз, когда я пытаюсь что-то редактировать, но впоследствии это работает отлично! В частности, когда я впервые щелкаю по области для редактирования, TinyMCE загружается, но когда я щелкаю по текстовой области, текстовая область исчезает и становится div, который я собирался редактировать (как будто я никогда не нажимал для редактирования). Однако впоследствии плагин работает отлично, если я не обновлю страницу.
код
<script type="text/javascript" src="jscripts/tinymce/jscripts/tiny_mce/tiny_mce.js"></script> <!-- TinyMCE -->
<script type="text/javascript" src="jscripts/jquery-1.5.1.min.js"></script> <!-- JQuery-->
<script type="text/javascript" src="jscripts/jquery.jeditable.mini.js"></script><!-- JEditable plugin-->
<script type="text/javascript" src="jscripts/jquery.tinymcehelper.js"></script>
<script type="text/javascript" src="jscripts/jquery.company.js"></script>
<div class="editable_textarea">Edit this div</div>
Что происходит, когда я нажимаю на текст «Edit this div», загружается TinyMCE. Но затем, когда я нажимаю на текстовую область, текстовая область исчезает, и я просто вижу текст «Редактировать этот div» (как будто я не нажимал, чтобы редактировать на месте). Эта проблема возникает только при загрузке / обновлении страницы. После этого все работает отлично.
Это мой код для jscripts / jquery.tinymcehelper.js (точно такой же, как в http://sam.curren.ws/index.cfm/2008/6/12/jEditable-TinyMCE-Plugin):
$.fn.tinymce = function(options){
return this.each(function(){
tinyMCE.execCommand("mceAddControl", true, this.id);
});
}
function initMCE(){
tinyMCE.init({
mode : "textarea",
theme: "advanced",
height: "100",
plugins: "table, tinyautosave, imagemanager, spellchecker, autoresize",
theme_advanced_buttons1_add_before : "tinyautosave, code, separator, delete_table",
theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,fontsizeselect,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,code,|,forecolor,backcolor,|,insertimage,spellchecker",
theme_advanced_buttons2 : "",
theme_advanced_buttons3 : "",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left"
});
}
initMCE();
$.editable.addInputType('mce', {
element : function(settings, original) {
var textarea = $('<textarea id="'+$(original).attr("id")+'_mce"/>');
if (settings.rows) {
textarea.attr('rows', settings.rows);
} else {
textarea.height(settings.height);
}
if (settings.cols) {
textarea.attr('cols', settings.cols);
} else {
textarea.width(settings.width);
}
$(this).append(textarea);
return(textarea);
},
plugin : function(settings, original) {
tinyMCE.execCommand("mceAddControl", true, $(original).attr("id")+'_mce');
},
submit : function(settings, original) {
tinyMCE.triggerSave();
tinyMCE.execCommand("mceRemoveControl", true, $(original).attr("id")+'_mce');
},
reset : function(settings, original) {
tinyMCE.execCommand("mceRemoveControl", true, $(original).attr("id")+'_mce');
original.reset();
}
});
Наконец, это мой код «настройки»:
// Jeditable customization
$(function(){
$(".editable_textarea").editable('ajax/save.php?editnotetext',
{
type : 'mce',
indicator : 'Saving...',
tooltip : 'Click to edit...',
name : 'note_text',
submit : 'OK',
cancel : 'Cancel',
height : '100px'
});
$(".dblclick").editable('ajax/save.php?editnotename', {
tooltip : 'Doubleclick to edit...',
indicator : 'Saving...',
event : 'dblclick',
name : 'name',
style : 'inherit'
});
});