2010-11-23 71 views
6

我對IE8(只有IE)有一定的問題,當我將其中的文本輸入字段聚焦在光標移動到該字段的開頭。我試圖在最後設置光標。我周圍的一派,發現了以下解決方案:光標移動到文本字段的開頭

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」。難道我做錯了什麼?是否僅爲TextArea定義了createTextRange?我試過在輸入document.getElementsByTagName(「input」)[0];後輸入js輸入和jquery輸入。我可以去「createTextRange」分支,但它仍然不會改變光標的位置。

@ Edit2:我改變了一下代碼,現在我從文檔中獲取輸入,並進入if分支。但隨後的瀏覽器顯示我:

​​

在此行中var range = input.createTextRange();

@ EDIT3:要回答James的問題。我有一個類,在那個類中,整個事物都與一個有輸入的jsp相關聯。在這一類我設置其與輸入相關領域的重點處理形成JSP inputElement.focus(onInputFocus)然後我有這樣的事情:

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

全班顯然要大得多,這不是我的代碼,但我猜測這是正在執行的最後一件事。

+0

此函數對於`元素可以正常工作。你確定你傳遞的元素是DOM輸入元素嗎? – 2010-11-23 09:59:51

+0

是的,我仔細檢查過它。現在的問題是「var range = input.createTextRange();」不知道爲什麼。它進入該分支,但它在該行上失敗,其餘的不執行。 – 2010-11-23 10:07:06

回答

4

對不起,我在這裏錯過了什麼?你想把光標設置到最後,還是突出顯示範圍?你的問題似乎暗示了前者,但解決方案實現了後者。

如果您只是想將光標設置到最後,那麼上述功能就沒有必要了。簡單地做以下對焦被設置:

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

看到這個的jsfiddle:http://jsfiddle.net/7vdv6/

編輯:

至於我能看到有東西一大堆,可能是從您的輸入焦點轉移走:

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.focus(); 
input.value = input.value; 

你也混雜了jQuery和標準的JavaScript。例如,當你可以使用$("input:first")時,你爲什麼使用document.getElementsByTagName("input")[0]

相關問題