Esiste un modo per attivare un'area di testo in un evento se l'utente modifica la riga su cui si trova il cursore, ad esempio facendo clic o utilizzando le frecce su/giù? O questo non è possibile in Javascript? Ho trovato dei modi per trovare/impostare la posizione corrente del cursore, ma non è quello che mi serve ...Evento di attivazione quando il cursore si sposta tra le righe nell'area di testo
risposta
Sembra che tu debba registrare un paio di eventi per la tua area di testo. In cima alla mia testa, un evento click e un evento keypress con più valori keycode. Hai bisogno di usare puro javascript o hai alcune librerie javascript da utilizzare?
Hai bisogno di aiuto per la registrazione degli eventi? o hai bisogno di aiuto per trovare la posizione del cursore durante uno degli eventi? (vedi il link di andy per quello) o è la risposta a entrambe le mie domande "sì"?
modificare
ok, da sei commenti che stai bene con jQuery e il plugin fieldselection vi impedisce di re-inventare la ruota.
- identificare i tasti della tastiera, i clic del mouse,? Copia incolla? eventi che potrebbero spostare il cursore in un campo di testo. Navigate and select portions of text, wikipedia
- durante l'evento, utilizzare il plugin fieldelection per ottenere la nuova posizione del punto di inserimento.
- utilizzare la posizione del cursore corrente & carattere & dimensioni & casella di testo & dimensione fisica & conteggio & interruzione di linea per determinare se si è passati ad una nuova linea.
- se hai cambiato riga, attiva un evento jQuery personalizzato per eseguire il lavoro desiderato.
// jQuery 1,7
$(document).ready(function(){
var currentLine = -1;
$("#textAreaID").on("keypress", function(evt){
if(evt.which === 40 || ...){
//down arrow key, enter key, page down key, all will move the caret to a newline
$(this).trigger("newline");
}else{
//a ton of text in a fixed width textarea will move the cursor to a newline
$(this).trigger("checkForNewline");
}
}).on("click checkForNewline", function(evt){
var jqElem = $(this);
//fieldSelection plugin call
var range = jqElem.getSelection();
if(range["row"] && range["row"] !== currentLine){
currentLine = range["row"];
jqElem.trigger("newline");
}else{
var handTypedNewlines = jqElem.val().split(/\r\n|\r|\n/);
var userTypedRowcounts = Math.floor(wholeString.length/jqElem.cols) + (handTypedNewlines instanceof 'object')?handTypedNewlines.length:0;
if(userTypedRowcounts != currentLine){
currentLine = userTypedRowcounts;
jqElem.trigger("newline");
}
}
}).on("newline", function(evt){
// do your work, caret is on a newline.
});
});
riferimento overflow dello stack.
http://stackoverflow.com/q/1937120/176818 ed ecco un esempio del plugin jQuery fieldelection http://laboratorium.0xab.cd/jquery/fieldselection/0.2.3-test/test.html – DefyGravity
Vedi i miei commenti sopra ...Quindi, sembra che dovrebbe essere fattibile, e il modo per farlo è tenere traccia dei clic e dei tasti e quindi confrontare la linea precedente e quella corrente e vedere se c'è stato un cambiamento? Dovrei riuscire a capirlo, una volta che vedo la strategia. – NumerousHats
E sì, non ho obiezioni alle librerie. Quasi certamente userò jQuery per altri aspetti del progetto (se scelgo di farlo come webapp ...) – NumerousHats
possibile duplicato del [Trova valore della linea di corrente di un
@AndyE C'è una differenza piuttosto sostanziale tra \ n e una linea che l'utente vede in una textarea. Ad esempio, questo commento non ha una nuova riga ma io sono già sulla terza riga della textarea :) – Esailija
@Esailija: l'OP non era abbastanza specifico per noi da dire, ma vale la pena segnalarlo nel caso in cui sia cosa sta cercando. Ecco perché il commento dice * "possibile duplicato ..." *. –