Javascript 通过修改插件调用jedtable提交按钮
解决方案1:不使用TINYMCE 如果您没有将TinyMCE用于JEditable,请查看下面的Arman p.帖子 解决方案2:使用TINYMCE 如果您使用的是TinyMCE,那么不幸的是,Arman p.s方法不起作用。Tinymce使用iframe编辑内容。这导致了一个问题,即当iframe具有焦点时,iframe将“捕获”所有键盘事件。因此,您需要修改tinymce定制 首先是在表初始化中,给save按钮一个类,我们称之为“save_button”:Javascript 通过修改插件调用jedtable提交按钮,javascript,jquery,events,tinymce,jeditable,Javascript,Jquery,Events,Tinymce,Jeditable,解决方案1:不使用TINYMCE 如果您没有将TinyMCE用于JEditable,请查看下面的Arman p.帖子 解决方案2:使用TINYMCE 如果您使用的是TinyMCE,那么不幸的是,Arman p.s方法不起作用。Tinymce使用iframe编辑内容。这导致了一个问题,即当iframe具有焦点时,iframe将“捕获”所有键盘事件。因此,您需要修改tinymce定制 首先是在表初始化中,给save按钮一个类,我们称之为“save_button”: 我想在用户按下Ctrl+S时调用
我想在用户按下Ctrl+S时调用submit(使用TinyMCE,这对用户来说是最符合逻辑的)。我有一篇文章试图解决这个问题,但我认为问题在于绝地表而不是TinyMCE 我认为最好的方法是稍微修改插件,以便在按下Ctrl+S时表单提交 不幸的是,到目前为止我所尝试的都不起作用。下面的警报甚至没有被调用。我认为问题与tinyMCE定制有关,因为JEditable中的内置选项无法使用Esc进行重置 代码(jquery.tinymcehelper.js)
$.fn.tinymce=函数(选项){
返回此值。每个(函数(){
execCommand(“mceAddControl”,true,this.id);
});
}
函数initMCE(){
tinyMCE.init({
模式:“无”,
主题:“高级”,
插件:“保存、表格、tinyautosave、imagemanager、拼写检查、自动调整大小”,
主题\u高级\u按钮1 \u在“tinyautosave,code,separator,delete\u table”之前添加\u,
主题高级按钮1:“粗体、斜体、下划线、删除线、|、左对齐、居中对齐、右对齐、全对齐、字体大小选择、搜索、替换、|、粗体、数字列表、|、凸出、缩进、块引号”,
主题_高级_按钮2:“撤消、重做、链接、取消链接、代码、|、前景色、背景色、|、插入图像、拼写检查”,
主题\高级\按钮3:“”,
主题\高级\工具栏\位置:“顶部”,
主题\高级\工具栏\对齐:“左”,
content_css:“css/tinymce.nebula.css”,
宽度:“700”
,
设置:功能(ed){
ed.onKeyPress.add(功能(ed,evt){
//捕获crtl+s,在html文档中使用receiveShortCutEvent
if(evt.keyCode==83&&evt.ctrlKey&&evt.shiftKey&&evt.altKey&&evt.metaKey){
setTimeout(函数(){
var e={type:'keypress'};
e、 charCode=e.keyCode=e.which=83;
e、 shiftKey=e.altKey=e.metaKey=false;
e、 ctrlKey=true;
window.parent.receiveShortCutEvent(e);/!!!委托创建的事件对象
}, 1);
}
});
}
});
}
initMCE();
$.editable.addInputType('mce'{
元素:功能(设置,原始){
var textarea=$('');
if(settings.rows){
textarea.attr('rows',settings.rows);
}否则{
textarea.height(设置.height);
}
if(settings.cols){
textarea.attr('cols',settings.cols);
}否则{
textarea.width(settings.width);
}
$(this).append(textarea);
返回(文本区域);
},
插件:功能(设置,原始){
tinyMCE.execCommand(“mceAddControl”,true,$(原始).attr(“id”)+“u mce”);
},
提交:功能(设置,原件){
//下面是我最好的尝试。我想我必须在这里有一些东西。我已经评论了我的修改
//输入。按键(功能(e){
//如果((e.ctrlKey)&(e.keyCode==83)){
//警报(“按下Ctrl+S”);
//e.预防违约();
//tinyMCE.triggerSave();
//tinyMCE.execCommand(“mceRemoveControl”,true,$(原始).attr(“id”)+“u mce”);
// }
// }
//否则{
tinyMCE.triggerSave();
tinyMCE.execCommand(“mceRemoveControl”,true,$(原始).attr(“id”)+“u mce”);
// }
},
重置:功能(设置,原始){
tinyMCE.execCommand(“mceRemoveControl”,true,$(原始).attr(“id”)+“u mce”);
reset();
}
});
Hey@Hydra。我会给你一个线索。下面你可以找到Ctrl+S窗口捕获的代码片段。只需简单地重写到上下文中。需要注意的主要问题是,你必须首先显式阻止事件的默认行为
已编辑并确保捕获
keydown
事件而不是keypress
keypress
不是跨浏览器解决方案
$(window).keydown(function(event) {
if ((event.keyCode == 83 && event.ctrlKey)){
alert("Ctrl+S pressed");
event.preventDefault();
}
});
在插件的源代码中查找以下代码:
input.keydown(function(e) {
if (e.keyCode == 27) {
e.preventDefault();
//self.reset();
reset.apply(form, [settings, self]);
}
});
并在该函数中添加另一个if
语句
if (e.keyCode == 83 && e.ctrlKey) {
e.preventDefault();
form.submit();
//alert("Ctrl+S Pressed!"); // Alert only here, after 2 previous lines
}
已测试!-正在工作
在您使用tinyMce的情况下,如果jEditable没有创建
input
,那么它可能正在创建textarea
,您可以尝试在textarea上捕获该事件。如果您向我提供使用tinyMce的jEditable的工作示例(任何链接),我将能够进一步帮助您。嘿@Hydra。我会给您一个线索。下面您可以找到Ctrl+S在窗口上捕获的代码片段。只需简单地重写到您的上下文。需要注意的主要问题是,您必须首先明确阻止事件的默认行为
已编辑并确保捕获
keydown
事件而不是keypress
keypress
不是跨浏览器解决方案
$(window).keydown(function(event) {
if ((event.keyCode == 83 && event.ctrlKey)){
alert("Ctrl+S pressed");
event.preventDefault();
}
});
在插件的源代码中查找以下代码:
input.keydown(function(e) {
if (e.keyCode == 27) {
e.preventDefault();
//self.reset();
reset.apply(form, [settings, self]);
}
});
并在该函数中添加另一个if
语句
if (e.keyCode == 83 && e.ctrlKey) {
e.preventDefault();
form.submit();
//alert("Ctrl+S Pressed!"); // Alert only here, after 2 previous lines
}
已测试!-正在工作
在你的