2010-11-23 13 views
6

İçinde metin bulunan bir giriş alanına odaklandığımda, IE8 ile (ve yalnızca IE) belirli bir sorunum var, imleç bu alanın başına gider. İmleci en sonunda ayarlamaya çalışıyorum. Etrafa googled ve aşağıdaki çözüm buldum: Buradaİmleç, bir metin alanının başına gider

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

"Giriş" basitçe bir sınıf (var inputElement = this.input;) içinde olan bir giriş alanıdır. Sorun, hem "setSelectionRange" hem de "createTextRange" dır. Yanlış bir şey mi yapıyorum? CreateTextRange yalnızca TextArea için tanımlanmış mı?

@Edit: iyi bir belgeyi girdikten sonra document.getElementsByTagName ("input") [0] 'a girdikten sonra js girişi ve jquery girişi gibi bir şey kullanıyordum. "CreateTextRange" dalına gidiyorum ancak hala imlecin konumunu değiştirmiyor.

@ Edit2: Kodu biraz değiştirdim, şimdi girdiyi belgeden alıyorum ve eğer şubeye girerse. Ama sonra tarayıcı bana gösteriyor: bu hat Edit3 @var range = input.createTextRange();

günü

Unexpected call to method or property access. 

: James'in soruyu cevaplamak için. Bir dersim var ve bu sınıfta, her şey bir girişi olan bir jsp ile ilişkilendirilir.

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

bütün sınıf açıkçası çok daha büyüktür ve bu benim kod ama değil: Bu derste ben o zaman böyle bir şey var jsp inputElement.focus(onInputFocus) oluştururlar girişi ile ilişkili olan alan için bir odak işleyicisi set Tahmin ediyorum ki, idam edilen son şey.

+0

Bu işlev, 'elements için çalışacaktır. Geçirdiğiniz öğenin bir DOM giriş öğesi olduğundan emin misiniz? –

+0

Evet, kontrol ettim. Sorun şu an "var range = input.createTextRange();" nedenini bilmiyorum. Bu şubeye giriyor ama bu hatta başarısız oluyor ve geri kalanlar idam edilmiyor. –

+0

Orada başarısız olursa, hata mesajı nedir? Odağı nereye koyacaksın? –

cevap

4

Üzgünüz, burada bir şey mi eksik? İmleci sonuna kadar mı ayarlamaya veya aralığı mı vurgulamaya çalışıyorsunuz? Sorusu, eskiyi ima eder gibi görünüyor, ama çözüm, ikincisine ulaşıyor.

İmleci sonuna kadar ayarlamak isterseniz, yukarıdaki işlev gerekli değildir. Odak kurulduktan sonra Basitçe aşağıdakileri yapın:

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

bu JSFiddle bakınız: http://jsfiddle.net/7vdv6/

DÜZENLEME:

gördüğüm kadarıyla olabilir şeyler bir sürü var odağı girişinizden ayırma:

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

} 

Aralarında bir netleme() eklerseniz ne olur? son iki satır: Ayrıca jQuery ve standart JavaScript oldukça dağınık bir karışım var

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

. Örneğin, $("input:first")'u kullanırken neden document.getElementsByTagName("input")[0] kullanıyorsunuz?

+0

Evet Sadece imleci en sonunda ayarlamaya çalışıyorum. Zaten "input.value = input.value;" ama bir şekilde bu işe yaramadı, imleç otomatik olarak baştan başlıyor. –

+0

Ne zaman arıyorsun? Yani Yaptığınız son şeylerden biri mi? Bize çevreleyen kodu gösterebilir misin? –

+0

biraz daha kod eklendi –

İlgili konular