2012-09-23 13 views
23

Duplicar posibles:
Find out the 'line' (row) number of the cursor in a textareaObtener número de línea en el área de texto

Quiero averiguar el número de línea que el cursor de un usuario en un sobre en textarea elemento HTML.

¿Es esto posible usar javascript y jquery?

+1

Definir líneas en un área de texto. ¿Incluye texto envolvente o solo quieres considerar nuevas líneas? – zeebonk

+0

Quiero establecer el límite de 15 caracteres en una línea y el usuario no debe poder ingresar más de 75 caracteres en 5 líneas – Freelancer

+0

buena pregunta en realidad :) Me gusta y Marcador;) – Marwan

Respuesta

20

Esto funciona con botón de clic. Robado de Find out the 'line' (row) number of the cursor in a textarea

​function getline() 
{ 
    var t = $("#t")[0]; 
    alert(t.value.substr(0, t.selectionStart).split("\n").length); 
}​ 

HTML

​<textarea rows="6" id="t"> 
there is no 
love in the ghetto 
so come here 
and get it 
</textarea> 
<input type="button" onclick="getline()" value="get line" />​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 
+3

Esto no tiene en cuenta los saltos de línea causados ​​por el ajuste de palabras. –

+4

@RobW: No creo que OP necesite ese – Bergi

+0

Me funcionó ... Es útil – Freelancer

1

Puede utilizar el siguiente enfoque

  1. Find the caret positio n (índice).
  2. Encuentra la subcadena de la posición 0 a
  3. índice
  4. Búsqueda de número de nuevas líneas en la subcadena obtenidos en el paso 2.

// Prueba

$(function() { 
    $('#test').keyup(function() { 
     var pos = 0; 
     if (this.selectionStart) { 
      pos = this.selectionStart; 
     } else if (document.selection) { 
      this.focus(); 

      var r = document.selection.createRange(); 
      if (r == null) { 
       pos = 0; 
      } else { 

       var re = this.createTextRange(), 
       rc = re.duplicate(); 
       re.moveToBookmark(r.getBookmark()); 
       rc.setEndPoint('EndToStart', re); 

       pos = rc.text.length; 
      } 
     } 
     $('#c').html(this.value.substr(0, pos).split("\n").length); 
    }); 
}); 
​ 

Aquí es un ejemplo de trabajo http://jsfiddle.net/S2yn3/1/

+0

¿Qué pasa con las líneas causadas por los saltos de línea? –

+0

¿Quisces decir wordwrap? –

+0

Sí, los saltos de línea causados ​​por el envío de palabras ... –

1

Esto se puede dividir en tres pasos:

Supongo que no desea considerar el texto envolvente y el contenido desplazado. Suponiendo que se utiliza la función de this answer, que sería como:

var el = document.getElementById("inputarea"); // or something 

var pos = getCaret(el), 
    before = el.value.substr(0, pos), 
    lines = before.split(/\r?\n/); 
return lines.length; 
Cuestiones relacionadas