Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过修改插件调用jedtable提交按钮_Javascript_Jquery_Events_Tinymce_Jeditable - Fatal编程技术网

Javascript 通过修改插件调用jedtable提交按钮

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时调用

解决方案1:不使用TINYMCE

如果您没有将TinyMCE用于JEditable,请查看下面的Arman p.帖子

解决方案2:使用TINYMCE

如果您使用的是TinyMCE,那么不幸的是,Arman p.s方法不起作用。Tinymce使用iframe编辑内容。这导致了一个问题,即当iframe具有焦点时,iframe将“捕获”所有键盘事件。因此,您需要修改tinymce定制

首先是在表初始化中,给save按钮一个类,我们称之为“save_button”:


我想在用户按下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
}
已测试!-正在工作

在你的