2010-11-23 21 views
6

IE8(とIEのみ)に問題があります。カーソルがそのフィールドの先頭に移動するテキストがある入力フィールドにフォーカスすると、問題が発生します。私は最後にカーソルを設定しようとしています。私の周りGoogleで検索し、次の解決策を見つけた:ここカーソルがテキストフィールドの先頭に移動する

function setSelectionRange(input, selectionStart, selectionEnd) { 
    input = document.getElementsByTagName("input")[0]; 
    if (input.createTextRange) { 
     var range = input.createTextRange(); 
     range.collapse(true); 
     range.moveEnd('character', selectionEnd); 
     range.moveStart('character', selectionStart); 
     range.select(); 
    } 
} 

「入力」は、単にクラス(var inputElement = this.input;)にある入力フィールドです。問題は、 "setSelectionRange"と "createTextRange"です。私は何か間違っているのですか? createTextRangeはTextAreaに対してのみ定義されていますか?

@Edit:うまくいけば、入力をdocument.getElementsByTagName( "input")[0]に変更した後、js入力とjquery入力のようなものを使用していたようです。私は "createTextRange"ブランチに行くことができますが、それでもカーソルの位置は変わりません。

@ Edit2:コードを少し変更しました。ドキュメントから入力を受け取り、ifブランチに入ります。しかし、その後のブラウザは私を示しています。この行で

​​

var range = input.createTextRange();

EDIT3 @:ジェームスの質問に答えるために。私はクラスを持っており、そのクラスでは、すべてが入力を持つJSPに関連付けられています。

function onInputFocus() { 
    isFocused = true; 
    valueDivElement.hide(); 
    labelElement.html(labelFocus); 
    if (currentData.selectedEntityCode) { 
     inputElement.val(currentData.selectedEntityCode); 
     inputElement.attr('title', currentData.selectedEntityCode); 
    } else { 

    } 

    var input = document.getElementsByTagName("input")[0]; 
    input.value = input.value; 
} 

クラス全体が明らかにはるかに大きいと、これは私のコードが、私ではありません。このクラスでは、私はその後、私はこのような何かを持っているのjsp inputElement.focus(onInputFocus)フォームの入力に関連付けられているフィールドのフォーカスハンドラを設定しますこれを推測するのは最後に実行されることです。

+0

この関数は、要素に対しては正常に機能します。渡す要素がDOM入力要素であることは確かですか? –

+0

はい、私はそれを再確認しました。問題は今 "var range = input.createTextRange();"です。なぜか分からない。そのブランチに入りますが、そのラインでは失敗し、残りは実行されません。 –

+0

エラーが発生した場合、エラーメッセージは何ですか?そして、あなたはどこに焦点を当てていますか? –

答えて

4

私はここに何か不足していますか?カーソルを最後に設定しようとしていますか、範囲を強調表示していますか?あなたは質問すると前者を暗示するように見えるが、解決策は後者を達成する。

カーソルを最後に設定したいだけなら、上記の機能は必要ありません。フォーカスが設定されていたら、単純に以下を実行します。

input.value = input.value; //assumes input is a DOM element. 

このJSFiddleを参照してください:http://jsfiddle.net/7vdv6/

EDIT:

私が見てできる限りかもしれないものの全体の束があります離れてあなたの入力から転用フォーカス:

あなたの間でフォーカスを()追加した場合はどうなり
isFocused = true; 
valueDivElement.hide(); 
labelElement.html(labelFocus); 
if (currentData.selectedEntityCode) { 
    inputElement.val(currentData.selectedEntityCode); 
    inputElement.attr('title', currentData.selectedEntityCode); 
} else { 

} 

最後の2行:

var input = document.getElementsByTagName("input")[0]; 
input.focus(); 
input.value = input.value; 

また、jQueryと標準のJavaScriptがかなり混乱しています。たとえば、$("input:first")を使用できるときに、なぜdocument.getElementsByTagName("input")[0]を使用していますか?

+0

はい私は単にカーソルを最後に設定しようとしています。私はすでに "input.value = input.value;"しかし何とかそれはうまくいきませんでしたが、カーソルは自動的に最初に移動します。 –

+0

いつ呼びますか?私。あなたがやっている最後のことの一つですか?それを取り巻くコードを表示できますか? –

+0

さらにいくつかのコードを追加しました –

関連する問題