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

2023-11-30

解决方案 1:不使用 TinyMCE

如果您没有将 TinyMCE 与 JEditable 一起使用,请查看下面 Arman P. 的帖子。

解决方案 2:使用 TinyMCE

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

首先是在 JEditable 初始化中,您只需为保存按钮指定一个类,我们将其称为“save_button”:

    $(".edit").editable('ajax/save.php?editnotetext', {
        type : 'mce',
        submit : '<button class="save_button">Save</button>',
        ...
    });

在 TinyMCE 初始化中,您必须创建一个捕获 Ctrl+S 并提交 save_button 类按钮的设置:

   tinyMCE.init({
    ...
    setup : function(ed) {
     ed.onKeyDown.add(function(ed, evt) {
        // catch crtl+s, use receiveShortCutEvent in the html-document
        if (evt.keyCode == 83 && evt.ctrlKey && !evt.shiftKey && !evt.altKey && !evt.metaKey) {
           evt.preventDefault();
           $('.save_button').submit();
       }
     });
   }

  });


I want to invoke submit when user presses Ctrl+S (using TinyMCE so that's the most logical for user). I had a post Make TinyMCE+JEditable submit after pressing ctrl+s that tried to address this, but the problem I think is with JEditable and not TinyMCE.

我认为最好的方法是稍微修改插件,以便当我按 Ctrl+S 时提交表单。

不幸的是,到目前为止我所尝试的方法都不起作用。下面的警报甚至没有被调用。我认为这个问题与tinyMCE定制有关,因为JEditable中可以用Esc重置的内置选项不起作用。

代码(jquery.tinymcehelper.js)

    $.fn.tinymce = function(options){
       return this.each(function(){
          tinyMCE.execCommand("mceAddControl", true, this.id);
       });
    }

    function initMCE(){
       tinyMCE.init({
            mode : "none",
            theme : "advanced",
            plugins: "save, 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,justifyfull,fontsizeselect,search,replace,|,bullist,numlist,|,outdent,indent,blockquote",
            theme_advanced_buttons2 : "undo,redo,link,unlink,code,|,forecolor,backcolor,|,insertimage,spellchecker",
            theme_advanced_buttons3 : "",
            theme_advanced_toolbar_location : "top",
            theme_advanced_toolbar_align : "left",
            content_css : "css/tinymce.nebula.css",
            width : "700"
            ,
            setup : function(ed) {
             ed.onKeyPress.add(function(ed, evt) {
                // catch crtl+s, use receiveShortCutEvent in the html-document
                if (evt.keyCode == 83 && evt.ctrlKey && !evt.shiftKey && !evt.altKey && !evt.metaKey) {
                   setTimeout(function(){
                    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); // !!! delegate created event object
                  }, 1);
               }
               });
           }

          });
    }

    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) {
    // BELOW IS MY BEST ATTEMPT. I THINK I HAVE TO HAVE SOMETHING HERE.I'VE COMMENTED OUT MY MODIFICATION
   //      input.keypress(function(e) {
   //         if ((e.ctrlKey) && (e.keyCode == 83)) {          
   //              alert("Ctrl+S pressed");
   //              e.preventDefault();
   //              tinyMCE.triggerSave();
   //              tinyMCE.execCommand("mceRemoveControl", true, $(original).attr("id")+'_mce');    
    //         }
  //        }
 //         else {
          tinyMCE.triggerSave();
          tinyMCE.execCommand("mceRemoveControl", true, $(original).attr("id")+'_mce');
    //      }
          },
       reset : function(settings, original) {
          tinyMCE.execCommand("mceRemoveControl", true, $(original).attr("id")+'_mce');
          original.reset();
       }
    });

嘿@Hydra。我会给你一个线索。您可以在下面找到代码片段Ctrl+S在窗口上捕获。简单地根据您的上下文重写。需要注意的主要事情是,您必须首先明确阻止事件的默认行为。

Edited
并且一定要抓住keydown事件不keypress. keypress不是跨浏览器的解决方案。

$(window).keydown(function(event) {
  if ((event.keyCode == 83 && event.ctrlKey)){
      alert("Ctrl+S pressed");
      event.preventDefault();
  }
});

对于 jEditable 在插件的源代码中找到以下代码:

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
}

Tested!- 在职的。

在您的情况下,您使用的是tinyMce,如果在这种情况下 jEditable 没有创建input然后它可能正在创造textarea,您可以尝试在文本区域上捕获该事件。如果您向我提供 jEditable 与tinyMce 的工作示例(任何链接),我将能够为您提供进一步帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过修改插件调用JEdtiable提交按钮 的相关文章

随机推荐

  • 限制 Docker 仅公开来自特定 IP 地址的端口

    如何限制 Docker 暴露的容器端口仅来自 IP 列表 只有此 IP 列表才能访问此端口 我尝试过 iptables I DOCKER p tcp dport PORT X j REJECT reject with icmp port u
  • GDB远程调试:无法停止线程

    我有一个数据库服务器在一个目标上 我像这样发射gdbserver 2345 bin ls 接下来 我从主机连接 gdb 并尝试发出下一个命令 gdb target remote 192 168 1 2 2345 Remote debuggi
  • 在 Access SQL 中查询“工作周”

    我有一个来自 MS Excel 2007 的公式 它返回特定月份内特定日期的工作周 B1 IF AND WEEKDAY A2 1 lt gt 1 A2 DATE YEAR A2 MONTH A2 1 A2 WEEKDAY A2 1 7 IF
  • 用于向量和矩阵计算的高性能数学库

    在哪里可以找到矢量和矩阵计算的快速库 我需要高性能 Update I need it for games calculations Go for Blaze Also check out the bench marking in paral
  • 即使显式调用析构函数后也会自动销毁对象

    以下程序 include
  • 应用程序在 iOS 9 上卡在启动屏幕中且没有错误

    我的应用程序在 iPhone 和模拟器上的 iOS 9 中都卡在启动屏幕上 我可以在 iOS 8 或更低版本的设备和模拟器上运行它 没有任何问题 我的同事在开发同一个应用程序时也遇到了完全相同的问题 没有错误或任何东西 只是挂在启动屏幕上
  • 在 Android 中的 FirestoreRecyclerAdapter 中显示 ServerValue.TIMESTAMP

    我想在列表中显示服务器时间戳 实际上是日期 这FirestoreRecyclerAdapter由此类提供 仅保留时间戳相关方法 public class Lista private Long timestamp private Map
  • 基于日期比较R的子集数据集

    我有一个数据集 如下所示 Col1 Col2 Col3 CutoffDate 12001 Yes 2008 08 15 2008 08 10 12001 Yes 2008 08 22 2008 08 10 12001 Yes 2008 08
  • 如何修复从 GEOS 转换为 s2 引起的球面几何误差

    我有同样的问题连接空间数据时如何解决球面几何故障 我以前可以使用的代码现在不能用于从 GEOS 到 s2 的转换 我不确定如何创建此错误的可重现示例 sf 包附带的示例数据集可以很好地使用此代码 因为我确信它们也已更新为可以与 s2 包一起
  • 带控件的表单级别的按键

    我想知道是否可以处理KeyPress表单级别的事件当有控制时以一种形式 当表单上没有控件时 我可以实现此目的 但是当我添加某些内容 例如按钮 时 表单会失去焦点 并且我无法将其返回 即使使用Me Focus 焦点仍位于按钮上 有办法做到吗
  • 成功更改 JS 中的不可变或原始数据类型。那么这些是原语还是 JS 概念是错误的?

    据我所知 JS 中有 4 个原语 直接存储值 而不是引用另一个内存位置的原语 String Number Boolean Symbol 我没有数undefined null 因为它们是特殊的数据类型 并且不通过继承链共享对象构造函数 现在
  • 清除 ASP.NET 中的文本框历史记录

    如何清除文本框的历史记录 我已设置 autocomplet off 并将 AutoCompleteType 设置为禁用 当我在 Chrome Firefox 中双击文本框时 会出现历史记录 文本 因此当我单击它时 文本将被插入到文本框中 有
  • 何时使用 OpenCL API 标量数据类型?

    我一直无法理解何时使用 OpenCL API 数据类型 如 cl float cl uchar 等 可以在此处找到 http www khronos org registry cl sdk 1 0 docs man xhtml scalar
  • Java:如何使用 switch 语句[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Java 中比较字符串 我无法理解如何使用 Java switch 语句 在执行其中一个 case 语句中的方法后 它仍然会转到默认语句并运行该语句 这是代码 Scanner scanner
  • Sympy:求解具有初始条件误差的微分方程

    SinceSympy版本 1 2 PythonSympy已经实现了在给定一些初始条件的情况下求解简单微分方程中的常数的能力 我试图测试此功能 但不断出现我不知道如何解决的错误 The 文档表示初始条件的格式如下 我尝试遵循实现该功能的实际拉
  • Java 和 SSH:维护连接

    目标 通过一个连接和多个会话或一个持久会话远程控制 ssh 服务器 问题 1 我目前使用 sshj 通过 SSH 进行一些远程控制 它运行良好 但我似乎无法让它正确处理提示 主机不提供真正的root权限 只提供sudo i 所以我需要先登录
  • 在android上模糊图像

    我想要模糊图像 我用过 public Bitmap mohu Bitmap bmpOriginal int hRadius int vRadius int width height r g b c a gry c1 a1 r1 g1 b1
  • 如何在 -(void)touchesMoved 期间仅调用一次方法?

    我在用 void touchesMoved每当我做某事enter特定的框架 在本例中是按钮的区域 我的问题是 我只希望它在我进入框架时做一些事情 not当我在框架内移动手指时 有谁知道我如何在框架内时仅调用一次方法 并且如果我在同一个 to
  • Delphi 使用可变参数列表调用 JNI 方法

    使用 Embarcadero 的 Jni api 单元 如何向需要它的 JNI 方法提供变量参数列表 例如 JNINativeInterface 的 CallStaticObjectMethodV 方法 清单 1 有一个 va list 类
  • 通过修改插件调用JEdtiable提交按钮

    解决方案 1 不使用 TinyMCE 如果您没有将 TinyMCE 与 JEditable 一起使用 请查看下面 Arman P 的帖子 解决方案 2 使用 TinyMCE 如果您使用 TinyMCE 那么不幸的是 Arman P s 方法