Ben

2011-11-18 12 views
6

Olası yinelenen onfocus metin kutusunun başında imleci koymak istiyorum:
Set cursor at a length of 14 onfocus of a textboxBen

Ben ateş ve IE bunu mümkün. Ama nedense onun

$('input:text').focus(
function(){ 
     document.getElementById('id').setSelectionRange(0, 0); 
    }); 

onfocus Chrome ve Safari :(

ben sadece sınırının altında kullanıyorum çalışmayan birisi nasıl Chrome ve Safari benzer olanı yapmak için bana söyleyebilir mi?

+0

Zaten bu soru göndermeden önce denedim. Başka benzer sorular da var, ancak hem createTextRange hem de setSelectionRange benim safari n kromumda çalışmıyorlar .. herhangi bir öneri neden? –

+0

Bu sorunu çözmek için yukarıda başvurulan sorunun yanıtları olmadığı için Webkit'te başarısız olduğu için bu yinelenen olarak kapatılmamalıdır. – gilly3

cevap

12

sorun odak olayı harekete sonra Krom (ben Safari de bunu duymamış, ama bunun için size kelime alacağım) seçimini öldürür yani, böylece bir zamanlayıcı eklemeniz gerekiyor. Aşağıdaki burada cevabım uyarlanmıştır:

How to place cursor at end of text in textarea when tabbed into

Ancak bu genellikle iyi kullanılabilirlik değil: Bu, kullanıcının beklediği aykırıdır ve fare kullanırken yararlı işlevini kaldıran (yani şapka gidiyor kullanıcının tıkladığı yer). Muhtemelen mousedown ve mouseup olayları ile ilgilenebilirsiniz.

Canlı tanıtım: http://jsfiddle.net/timdown/z9DhX/1/

Kodu:

function moveCaretToStart(el) { 
    if (typeof el.selectionStart == "number") { 
     el.selectionStart = el.selectionEnd = 0; 
    } else if (typeof el.createTextRange != "undefined") { 
     el.focus(); 
     var range = el.createTextRange(); 
     range.collapse(true); 
     range.select(); 
    } 
} 

var textBox = document.getElementById("id"); 

textBox.onfocus = function() { 
    moveCaretToStart(textBox); 

    // Work around Chrome's little problem 
    window.setTimeout(function() { 
     moveCaretToStart(textBox); 
    }, 1); 
}; 
+0

Açıklama için çok teşekkürler! şimdi tüm tarayıcılarda zaman aşımına uğradı fn :) –

+0

Teşekkürler Tim. Şimdiye kadar gördüğüm en yararlı cevap. – mwrf

5

.. Webkit 0 bir gecikmeyle setTimeout kullanma etkinlik tamamen harekete sonra kadar komut yürütülmesini erteleme gerek odak olayın parçası olarak şapka konumunu sıfırlıyor iyi yeterlidir:

$(":text").focus(function() { 
    var input = this; 
    setTimeout(function() { 
     input.setSelectionRange(0, 0); 
    }, 0); 
}); 

Çalışma demo: http://jsfiddle.net/ZkqGH/1/

+0

Yanıtladığınız için teşekkürler, fakat henüz çalışmıyor :(.. İmlecim içinde tıklattığımda (yalnızca krom ve safari'de) textbox'ın değerinin sonunda gider. Firefox beklendiği gibi çalışıyor. –

+1

@Deepak - I ' ve benim cevabımı yeniden yazdı. 'setSelectionRange() 'iyi çalışıyor, sadece Chrome'un caret konumunu sıfırlamasını engellemek için yürütmeyi ertelemeniz gerekiyor. – gilly3