0

jEditableがtextareaで正常に動作して、オブジェクト内のコンテンツを編集しています。jEditableのonblurオプションを使用してonBlurを(URLではなく)関数に直接送信しています。たとえば、alt + tabを使用してウィンドウを変更しない限り、すべてが期待どおりに機能します。alt + tabを使用すると、コンテンツはコールバック関数を無視して実際のhttpリクエストを介して送信されているように見えます。

私の非常に基本的なサンプル実装は次のようになります。

$(".editable").editable(function(content,settings){
        content = content.replace(/\n/gi,"<br />");
        return content;
    },{
    data: function(value, settings) {
        return value.replace(/<br[\s\/]?>/gi, '\n');
    },
    type: "textarea",
    onblur: "submit"
});​

ここでテストできます:http://jsfiddle.net/xmajox/wePp5/

他のすべてのウィンドウ操作を試しました。サイズ変更、移動など、ブラウザのタブ間を移動することもできます(データを送信して編集モードを終了します)。

これをどのように飼いならすかについてのアイデアはありますか?

更新:さらにいくつかのテストと他の人々からのいくつかの協力の後、これはOS(ウィンドウマネージャー?)に依存しているようです。これは、ubuntu 12.10で統一されて一貫して発生しますが、MacまたはWindowsでは発生しません(他のLinuxボックスはテストされていません)。

また、alt-tabを使用するとコールバックメソッドが実行されることが証明されましたが、フォームは後でPOSTされます。ライブのpreventDefaultを追加しても効果がないようです。

4

1 に答える 1

0

これに対する修正を見つけましたが、なぜそれがそのような特定の状況で起こるのかを完全には理解できません。

まず、私は他の10分の1の組み合わせでこれを試しましたが、この問題は発生しなかったため、世界で最も幸運な男である必要があります。それを実現できるのは次の場所だけでした。

 Ubuntu 12.10 (with Unity) and Chrome (v22 at the time of this post)

免責事項:これは、他の場所で発生しないという意味ではありません。テストした(または友人にテストを依頼した)場所で再現できなかっただけです。

問題: フォーカスが失われると、jEditable(バージョン1.7.1以降)は、実際にアクションを実行する前にタイムアウトを設定し(デフォルトでは200ms)、ソースのコメントに従ってアクションが重複しないようにします。(上記のブラウザとOSの組み合わせを使用して)タイムアウトが発生する前に(つまり、データが送信されてメソッドが実行される前に)ブラウザウィンドウの外にAlt + Tabキーを押すと、データを含むPOSTリクエストが強制され、完全に無視されます。 PreventDefaultsまたはfalseを返します。Altキーを押しても、この問題は発生しません...押し続けて(200ミリ秒以上、つまりタイムアウトが発生するのに十分な時間)、Altキーを押して離れます。

解決策: jEditableのソースを編集して、タイムアウトを減らしました(または削除しました)。だから私は280行目あたりです。

(...)
    input.blur(function(e) {
         // prevent double submit if submit was clicked 
         t = setTimeout(function() {
              form.submit();
         }, 200);
    });
(...)

私はそれを次のように変更しました:

(...)
    input.blur(function(e) {
        form.submit();
    });
(...)

注: 私の状況では(テキスト領域をぼかしでのみ送信し、ユーザーがデータを送信できるようにする他のコントロールなしで)、MikaTuupolaがコメントで言及していた二重送信の問題を再現できないため、これを削除しました。送信onBlurがアクティブな状態でテキスト入力フィールド(Enterキーを押して送信される)がある場合、その状況に陥る可能性があります。そのような場合は、タイムアウトを減らすか、onBlur送信の使用を避けることをお勧めします。

于 2012-10-25T15:04:28.333 に答える