jqgrid редактирует и добавляет формы, содержащие текстовые области, которые можно редактировать и вводить, добавляет к ним новую строку.
Как разрешить Ctrl + S сохранять редактирование и добавлять формы, точно так же, как нажать кнопку «Сохранить» в этих формах?
Для встроенного редактирования я смог добавить кнопку Сохранить на панель инструментов jqgrid и использовать
case 83: $("#grid_savebutton").click(); break;
В событии body onkeydown для имитации нажатия на эту кнопку с помощью Ctrl + S
Как разрешить также сохранять в редакторе и добавлять формы по Ctrl + S?
Обновление
Я добавил код
case 83: saveb = $("#TblGrid_" + "grid"+ "_2 #sData");
if (saveb.length > 0 ) {
evt.stopPropagation();
return;
}
$("#grid_savebutton").click();
break;
к телу на обработчик. После первого открытия формы редактирования этот код всегда находит, что кнопка sData существует, и перестает вызывать grid_savebutton. Похоже, кнопка sData существует, даже если форма редактирования / добавления закрыта.
Как это исправить, чтобы, если форма редактирования / добавления не открыта, была выполнена $ ("# grid_savebutton"). Click ()?
Update2
используемые привязки клавиш:
jQuery.extend(jQuery.jgrid.edit, {
savekey: [true, 13],
recreateForm: true,
closeOnEscape: true,
reloadAfterSubmit: false,
beforeShowForm: function ($form) {
var gridIdEncoded = $.jgrid.jqID($form[0].id.substring(8));
$("#editmod" + gridIdEncoded).bind( 'keydown', beforeShowFormHandler);
},
onClose: function () {
var gridIdEncoded = 'grid'; // $.jgrid.jqID($form[0].id.substring(8));
$("#editmod" + gridIdEncoded).unbind( 'keydown', beforeShowFormHandler);
}
});
var beforeShowFormHandler = function (e) {
var gridIdEncoded = 'grid';
if (e.ctrlKey && e.which === 83) { // 83 - 's'
$("#TblGrid_" + gridIdEncoded + "_2 #sData").trigger("click");
return false;
}
};
привязка глобального ключа:
$(function () {
$("html").keydown(body_onkeydown);
});
function body_onkeydown(evt) {
var saveb;
if (evt.ctrlKey) {
switch (evt.keyCode) {
case 83:
saveb = $("#TblGrid_" + "grid" + "_2 #sData");
// todo: saveb.length > 0 is always true after form is opened first time:
if (saveb.length > 0) return;
$("#grid_savebutton").click(); break;
}
cancel(evt);
return false;
}
}
function cancel(evt) {
evt.returnValue = false;
evt.keyCode = 0;
evt.cancelBubble = true;
evt.preventDefault();
evt.stopPropagation();
}
Update3
HTML-редактор TinyMCE присоединяется к элементам textarea в форме в событии afterShowForm с использованием
$('.htmleditor', formSelector).attr('cols', '50').attr('rows', '15').tinymce({
theme: "advanced",
language: "et",
theme_advanced_buttons2: "",
theme_advanced_buttons3: "",
theme_advanced_buttons1: "bold,italic,underline,strikethrough,separator,justifyleft,justifycenter," +
"justifyright,justifyfull,|,bullist,numlist,|,outdent,indent,|,cut ,copy,paste,undo,redo" +
"link,unlink,image,cleanup,code,hr,|,removeformat,formatselect,|,fontselect,fontsizeselect," +
"sub,sup,|,forecolor,backcolor,forecolorpicker,backcolorpicker,charmap,visualaid," +
"anchor,blockquote"
});
}
Ctrl + S в textarea заставляет стандартное диалоговое окно сохранения IE9 появляться в этом случае. Как разрешить Ctrl + S также сохранять форму в tinyMCE?