2014-12-30 14 views
5

C'è un evento che viene generato quando si scorre il testo all'interno di un tag <input>? Voglio dire quando il testo all'interno è troppo lungo e si sposta il cursore di input alla fine di esso, ecc.Evento per rilevare quando si scorre il testo in uno <input>?

C'è un evento scroll che si può catturare sull'elemento quando questo scorre nel layout, ma non è quello quello che voglio.

UPDATE: Ecco un violino per testare gli eventi discussi: http://jsfiddle.net/lborgman/L8k5ggnk/3/

+0

Sono curioso di sapere per cosa lo si vuole usare. – jbg

+0

@jbg, solo una riscrittura di complete.ly.js. Usa uno "sfondo" '' -tag per mostrare un suggerimento. Voglio far scorrere il testo nel suggerimento quando il testo nel principale '' è scostato. – Leo

+1

Un 'input' genera un evento' scroll' quando il testo in eccesso "scorre" tramite la modifica in overflow, almeno in Firefox. –

risposta

3

Non c'è un evento specifico per questo che funzioni su tutti i browser. Firefox genera un evento scroll quando il testo "scorre" modificando il punto di inserimento, ma Chrome e probabilmente altri browser non lo fanno.

Ecco un elenco di eventi che potrebbero modificare il punto di inserimento.

  • input
  • keydown
  • keyup
  • focus
  • blur
  • click
  • change
  • scroll

Associare un listener di eventi a tutti questi dovrebbe essere sufficiente per rispondere al cambiamento del punto di inserimento. Credo che la lista qui sopra sia completa, ma se ne ho perso qualcuno, fammi sapere!

+0

Grazie, sembra buono, ma alcuni dettagli: non c'è anche un 'change'event? E 'sfocatura'. (E perché è necessario 'keydown'? E l'altra copertina' scroll'?) – Leo

+1

@Leo 'change'! Come mi sono perso? 'keydown' è necessario per rispondere alla pressione di un tasto, dato che' keyup' si attiva una volta sola quando il tasto viene rilasciato (non per ogni volta che un personaggio viene aggiunto/rimosso). Probabilmente si potrebbe abbandonare lo scroll, a meno che non vi sia un motivo per cui scorre senza l'input dell'utente. Non sono sicuro di 'blur', ma penso che potrebbe essere effettivamente necessario per il browser che ripristina lo scorrimento su sfocatura. –

+0

Ah, buona idea di 'keydown'! – Leo

2

Hai provato il Caret Plugin?

è possibile ottenere la posizione del cursore con:

pos = $(textarea).caret() 

e cattura quando cambia di nuovo. Se quest'ultimo è diverso dal primo, allora sai che l'utente si è spostato all'interno dell'input.

+0

Grazie, no, ma sto cercando di evitare jQuery qui. Vale a dire uno dei punti con complete.ly.js ... ;-) – Leo

+2

@Leo la fonte del plugin è piuttosto piccola, quindi forse puoi guardarla e avere qualche idea. Infatti, mentre guardo la fonte, posso notare pochissimo jQuery all'interno della funzione stessa. –

+1

Grazie, @Hanlet, ho dato un'occhiata, ma non rileva alcun evento. Imposta o ottiene solo la posizione del cursore. – Leo