11

フォームにいくつかの入力フィールドがあり、そのうちの1つはTinyMCE(バージョン3.5.2)を使用しています。TinyMCEがロードされると、フォーカスがそれ自体に設定されます。どうすればこれを防ぐことができますか?デフォルトで最初の入力を選択したままにしておきたい。

これは私のコードが今どのように見えるかです

var tinymce = $('#Content');
tinymce.tinymce({
    theme: "advanced",
    plugins: "...",
    theme_advanced_buttons1: "...",
    theme_advanced_buttons2: "...",
    theme_advanced_buttons3: "...",
    theme_advanced_buttons4: "...",
    theme_advanced_toolbar_location: "top",
    theme_advanced_toolbar_align: "left",
    theme_advanced_statusbar_location: "bottom",
    theme_advanced_resizing: true,
    content_css: [...],
    template_external_list_url: "lists/template_list.js",
    external_link_list_url: "lists/link_list.js",
    external_image_list_url: "lists/image_list.js",
    media_external_list_url: "lists/media_list.js",
    template_replace_values: {
        username: "Some User",
        staffid: "991234"
    }
});

アップデート:

さらにテストを行った結果、この問題はIE9でのみ発生しているようです。Chrome、FireFox、Opera、Safariは、ページの読み込み時にエディターにフォーカスを設定しません。IE7およびIE8モードのIE9もページの読み込みにフォーカスを設定しませんが、別の入力にフォーカスを設定しようとしても、IE9自体がエディターにフォーカスを設定します。

ただし、テキストエリアに値を含むページをロードすると、これはすべて変更されます。そうすると、IE9は他のブラウザと同じように機能します。今のところ、テキストエリアにスペースを1つ入れてページを読み込んでいるので、IE9は正しく機能します。

4

2 に答える 2

1

より良いアプローチを知るために、残りの入力とフォーム構造を用意するのに役立ちますが、この線に沿った何かが役立つはずです:

jQUERY

function myCustomOnInit() {
    $('form *:input[type!=hidden]:first').focus();
}

tinyMCE.init({
        ...
        oninit : myCustomOnInit
});

ドキュメントから:

このオプションを使用すると、すべてのエディターインスタンスが初期化を完了したときに実行される関数を指定できます。これは、HTMLページのonloadイベントによく似ています。

注:関数名を文字列として渡すこともできます。ただし、この場合、関数はページのグローバルスコープで宣言する必要があります。

ここでの秘訣は、最初に表示される入力のフォーカスを設定することです。

$('form *:input[type!=hidden]:first').focus();

この作業例を参照してください!


編集済み

これをテストしてIE9で動作させるのにかなりの時間がかかりましたが、次のとおりです。

この実用的なソリューションを参照してください!

jQuery

setup : function(ed) {
  ed.onLoadContent.add(function(ed, o) {
    var controlLoad = setTimeout(function() {
      if ($('.mceIframeContainer').size()==1) {
        $('form *:input[type!=hidden]:first').focus();
        clearTimeout(controlLoad);
      }
    }, 100);
  });
}

これが行っているのは、クラスが見つかるまでタイムアウトを実行する.mceIframeContainerことです。つまり、ロードが完了します。それを見つけた後、最初の入力要素のフォーカスを設定し、タイムアウトがクリアされます。

于 2012-06-08T17:41:10.593 に答える
-1
setup: function(ed){
   ed.on('postRender', function (editor, cm) { editor.preventDefault(); }); 
}

関数内で単一のコマンドを実行すると、preventDefaultが無視され、フォーカスとスクロールが続行されます!!!! :D

于 2016-07-03T07:27:04.250 に答える