2012-07-02 5 views
5

Quando provo a fare .focus(), mi aspetto di mettere a fuoco l'elemento di input e di vedere il cursore dopo l'ultimo carattere del valore. E lo vedo in IE.jQuery .focus() funziona in modo diverso in ogni browser. Come impedirlo?

In safari/chrome input ottiene lo stato attivo e tutto il testo è selezionato. In firefox/l'ingresso opera ottiene la messa a fuoco, ma il cursore è all'inizio.

Cosa posso fare per impedirlo e ottenere un comportamento corretto per tutti i browser?

Un esempio è qui: http://jsbin.com/ozojol/edit#javascript,html

PS. Il metodo focus().val('').val(value) non funziona in IE ... Quali altre soluzioni alternative esistono?

+0

Quale versione di Firefox e su quale sistema operativo? Firefox 13.0.1 su Windows 7 posiziona il cursore dopo il valore. –

+0

OSX, FireFox 13.0 :) Proverò 13.0.1 dopo, ma funziona in modo diverso negli altri browser :) E sto cercando di trovare una soluzione su come prevenirlo. – ValeriiVasin

+0

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

risposta

7

È possibile utilizzare l'ingresso del selectionStart e selectionEnd proprietà nella maggior parte dei browser e qualche brutta roba TextRange in IE < 9. Ecco qualche codice adattato da an answer to a similar question.

Demo: http://jsbin.com/azapuy

Codice:

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

Posso confermare che funziona in tutti i principali browser. – rcdmk

+0

Ottimo! Grazie! – ValeriiVasin

+0

Funziona in FF 16 - bello! Devi stare attento a chiamare moveCaretToEnd con l'effettivo elemento dom (come mostrato sopra), non l'oggetto jQuery. Quest'ultimo non funziona. – sieppl

1

C'è un ottimo plugin leggero per spostare il cursore alla fine del contenuto all'interno del tuo elemento. jQuery Caret

Live Demo

+0

Questo non funziona su Firefox 3.6. Funziona in: IE7, IE8, IE9, Chrome 19 e Safari 4. Passa alla prima posizione in: Opera 11. – rcdmk

+0

@ rcdmk Ho aggiornato la mia risposta. ** [jQuery Caret] (https://github.com/DrPheltRight/jquery-caret) ** affronterà il problema. – Farahmand

+0

jQuery Caret non funziona in IE8. forse altri, non ho provato. – ValeriiVasin

0

L'unico comportamento comune è il select(), che seleziona il testo di input in tutti i principali browser (non può confermare se funziona in tutti i browser).

Problemi correlati