1

Chrome で jquery (つまり、var $textarea = $('')) を使用してプログラムで作成した HTML との相互作用を単体テストするために、qunit フレームワークを使用しています。テキストエリアの選択を更新するために使用しているコードは次のとおりです。

    TextAreaView.prototype.setSelectionOffsets = function(cursor) {
    var input = this.$textarea.get(0);
    if (!input.setSelectionRange) {
        return;
    }
    if (cursor.start <= input.value.length && cursor.end <= input.value.length) {
        input.focus();
        input.setSelectionRange(cursor.start, cursor.end, "forward");
    }
}

このメソッドを 0 < cursor.start == cursor.end < input.value.length で呼び出していることを確認しました。

デバッガーをステップ実行すると、すべて問題ないように見えますが、「input.setSelectionRange」行に到達した後、input 要素を調べると、selectionEnd および selectionStart プロパティが 0、selectionDirection="none" であることがわかります。

ここで何が起こっているのか、私は非常に混乱しています。textarea 要素に関するMozilla のドキュメントを読みましたが、setSelectionRange への私の呼び出しは有効であると信じています。これは、プログラムでテキストエリアを作成し、実際には表示されていないという事実に何らかの形で関連している可能性がありますか?

4

1 に答える 1

2

質問を入力しているときにこれに対する答えを見つけたので、これに出くわす可能性のある人のために共有すると思いました. 答えは明らかでした。基本的に最後の文で思いつきました: $('') を使用して textarea DOM 要素を作成し、そのオブジェクトを保存していましたが、そのオブジェクトをドキュメントに挿入したことはありません。要素を本体に追加した後、setSelectionRange は期待どおりに選択を更新します。私の状況では、単体テストの結果ページに実際のテキストエリアを表示することはあまり望ましくありませんが、これは $textarea.hide() を呼び出すことで簡単に修正できます。

于 2012-08-15T16:43:42.230 に答える