1

Ctrl+SキーとCtrl+Qキーは、jqgridの編集に含まれ、Olegのすばらしい答えを使用してフォームを追加します。

beforeShowForm: function ($form) {
  var gridIdEncoded = $.jgrid.jqID($form[0].id.substring(8));
  $("#editmod" + gridIdEncoded).bind('keydown.formEvent', function (e) {
    if (e.ctrlKey && e.which === 83) {
      $("#TblGrid_" + gridIdEncoded + "_2 #sData").trigger("click");
      return false;
      }
    if (e.ctrlKey && e.which === 81) {  // ctrl-q
                   $("#TblGrid_" + gridIdEncoded + "_2 #cData").trigger("click");
                   return false;
                   }
}

TinyMCE htmlエディターは、afterShowFormイベントでjqgridフォームのtextarea要素にアタッチされます。

    $('.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"
    });
}

その後、textareaでCtrl + Sを押すと、IE9標準の保存ダイアログが表示されます。Ctrl + SでjqgridフォームをtinyMCEに保存できるようにする方法も?

アップデート

以下のコードを使用して回答からの推薦を試みました。キーダウンイベントはキャッチされません。

afterShowForm: function (formSelector) {
        $('.htmleditor', formSelector).attr('cols', '50').attr('rows', '15').tinymce({
            setup: function (ed) {
                ed.onKeyDown.add(function (ed, e) {
                    // this box happens: alert('setup binding');
                    var gridIdEncoded = $.jgrid.jqID(formSelector[0].id.substring(8));
                    $("#editmod" + gridIdEncoded).bind('keydown.formEvent', function (e) {
                        alert('in keydown'); // this does not happen
                        if (e.ctrlKey && e.which === 83) {
                            $("#TblGrid_" + gridIdEncoded + "_2 #sData").trigger("click");
                            return false;
                        }
                        if (e.ctrlKey && e.which === 81) {  // ctrl-q
                            $("#TblGrid_" + gridIdEncoded + "_2 #cData").trigger("click");
                            return false;
                        }
                    });
                });
            },

            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"
        });
    };

Update2

e。これは未発見でした。コード

$('.htmleditor', formSelector).attr('cols', '50').attr('rows', '15').tinymce({
    setup: function (ed) {
        ed.onKeyDown.add(function (ed, e) {
            var gridIdEncoded = $.jgrid.jqID(formSelector[0].id.substring(8));
            if (e.ctrlKey && e.keyCode === 83) {
                $("#TblGrid_" + gridIdEncoded + "_2 #sData").trigger("click");
                return false;
            }
            if (e.ctrlKey && e.keyCode === 81) {
                $("#TblGrid_" + gridIdEncoded + "_2 #cData").trigger("click");
                return false;
            }
        });
    },

ctrl+sおよびctrl+qをキャッチします。以下のコードを使用してhtmlkeydownイベントで定義されたグローバルショートカットキーもたくさんあります。tinymceにフォーカスがある場合、これらは無視されます。それらを機能させる方法も。メインウィンドウまたは他のアイデアでhtml.keydownを呼び出す方法は?

$(function () {
    $("html").keydown(function (evt) {
        var elem = evt.target || evt.srcElement;
        if (evt.ctrlKey) {
            switch (evt.keyCode) {
                case 68: openWindow('ToodeL'); return false;
                case 69: openWindow('DoklstlG'); return false;
... lot of openWindow calls
4

1 に答える 1

2

私自身はtinyMCEを使用していませんが、デモを簡単に調べると、 tinyMCEがを使用していることがわかります<iframe>keydown内部でもイベントをキャッチする必要がある場合は、<iframe>追加のkeydownイベントハンドラーを設定する必要があります。持っているデモのために

<textarea name="content" style="width:100%"></textarea> 

のID<iframe>が使用されcontent_ifrます。したがって<iframe>、途中で作成されたby idを検索するかiframe、の<span>兄弟で子を検索してみてください<textarea>.contentWindow.document次に、<iframe>要素から取得して、keydownにイベントハンドラーを設定できます.contentWindow.document。詳細については、回答これを参照してください。おそらく、ここのような他のもっとtinyMCE指向のソリューションの方が良いでしょう。私はtinyMCEを自分で使用していないので(私の答えの最初の文を参照)、特定の方法をお勧めすることはできません。

更新:tinyMCEを提供するより直接的な方法があるように思えます:onKeyDown

于 2012-04-06T21:14:38.283 に答える