2012-07-02 10 views
5

Kiedy próbuję wykonać .focus(), oczekuję ustawić ostrość na element wejściowy i zobaczyć kursor po ostatnim znaku wartości. I widzę to w IE.jQuery .focus() działa inaczej w każdej przeglądarce. Jak temu zapobiec?

Podczas wprowadzania danych Safari/chrom zostaje ustawiona ostrość i wybrany jest cały tekst. W polu firefox/opera dostaje się fokus, ale kursor jest na początku.

Co mogę zrobić, aby temu zapobiec i uzyskać poprawne działanie we wszystkich przeglądarkach?

Przykładem jest tutaj: http://jsbin.com/ozojol/edit#javascript,html

PS. Metoda focus().val('').val(value) nie działa w IE ... Jakie inne sposoby obejścia tego problemu istnieją?

+0

Jaką wersję Firefox i na jakim systemie operacyjnym? Firefox 13.0.1 na Windows 7 umieszcza kursor za wartością. –

+0

OSX, FireFox 13.0 :) Spróbuję 13.0.1 później, ale działa to inaczej w innych przeglądarkach :) I staram się znaleźć rozwiązanie, jak temu zapobiec. – ValeriiVasin

+0

Zobacz http://stackoverflow.com/a/4716021/96100 –

Odpowiedz

7

można użyć wejściowego selectionStart i selectionEnd właściwości w większości przeglądarek i rzęsiste TextRange rzeczy w IE < 9. Oto niektóre kodu adaptacją an answer to a similar question.

Demo: http://jsbin.com/azapuy

Kod:

function moveCaretToEnd(el) { 
    if (typeof el.selectionStart == "number") { 
     el.selectionStart = el.selectionEnd = el.value.length; 
    } else if (typeof el.createTextRange != "undefined") { 
     var range = el.createTextRange(); 
     range.collapse(false); 
     range.select(); 
    } 
} 

var input = $('#i')[0]; 
input.focus(); 
moveCaretToEnd(input); 
+1

Potwierdzam, że działa we wszystkich głównych przeglądarkach. – rcdmk

+0

Świetnie! Dziękuję Ci! – ValeriiVasin

+0

Działa w FF 16 - fajnie! Trzeba uważać, aby wywołać moveCaretToEnd z rzeczywistym elementem dom (jak pokazano powyżej), a nie obiektem jQuery. Ten ostatni nie działa. – sieppl

1

Istnieje świetny lekki plugin, który przenosi karetkę na koniec zawartości w twoim żywiole. jQuery Caret

Live Demo

+0

To nie działa w Firefoksie 3.6. Działa w: IE7, IE8, IE9, Chrome 19 i Safari 4. Przechodzi na pierwszą pozycję w: Opera 11. – rcdmk

+0

@rcdmk Zaktualizowałem moją odpowiedź. ** [jQuery Caret] (https://github.com/DrPheltRight/jquery-caret) ** rozwiąże ten problem. – Farahmand

+0

jQuery Caret nie działa w IE8. może inni, nie próbowali. – ValeriiVasin

0

Jedyną wspólną zachowanie jest select(), że wybiera wpisywania tekstu w wszystkich głównych przeglądarek (nie może potwierdzić, czy to działa we wszystkich przeglądarkach).

Powiązane problemy