2009-04-27 12 views
11

entiendo que con javascript puede seleccionar el contenido de un cuadro de texto con el siguiente código (en jQuery):contenidos Anule la selección de un cuadro de texto con javascript

$("#txt1").select(); 

¿Hay una manera de hacer lo contrario? ¿Deseleccionar el contenido de un cuadro de texto? Tengo el evento de foco de una serie de cuadros de texto configurados para seleccionar los contenidos dentro de ellos. Hay momentos en los que quiero enfocar un cuadro de texto particular SIN seleccionarlo. Lo que planeo hacer es llamar al evento de enfoque para este cuadro de texto en particular, pero luego seguirlo con una llamada para deseleccionarlo.

$("input[type=text]").focus(function() { 
    $(this).select(); 
}); 

//code.... 

$("#txt1").focus(); 

//some code here to deselect the contents of this textbox 

¿Alguna idea?

Gracias!

Respuesta

17

qué pasa con esto:

$("input").focus(function(){ 
    this.selectionStart = this.selectionEnd = -1; 
}); 
+0

funciona muy bien en IE9. FF parece un poco lento para deseleccionar. – Maxx

+0

¿podría ser que Firefox estaba tomando 1.5GB de ram en el momento de esta lentitud? a mi me gusta hacer eso justo antes de matar -9 – mkoryak

8

Si solo le asigna el valor del cuadro de texto a sí mismo, debe deseleccionar el texto.

0

En lugar de seleccionar y luego deseleccionar, ¿por qué no almacenar temporalmente un valor booleano en el elemento dom?

$("input[type=text]").focus(function() { 
    if($(this).skipFocus) return; 
    $(this).select(); 
}); 

//code.... 

$("#txt1").skipFocus = true; 
$("#txt1").focus(); 
-1

Si desea anular la selección de un cuadro de texto usando jQuery haga lo siguiente:

$(your_input_selector).attr('disabled', 'disabled'); 
    $(your_input_selector).removeAttr('disabled'); 
3

Es necesario configurar el atributo selectionStart y selectionEnd. Pero por alguna razón, configurar estos en el evento de enfoque no funciona (no tengo idea de por qué). Para hacerlo funcionar, configure los atributos luego de un pequeño intervalo.

$(document).ready(function(){ 
    $('#txt1').focus(function(){ 
     setTimeout(function(){ 
     // set selection start, end to 0 
     $('#txt1').attr('selectionStart',0); 
     $('#txt1').attr('selectionEnd',0); 
     },50); // call the function after 50ms 
    }); 
    }); 
1

"centrarse un cuadro de texto en particular sin seleccionarlo": me gustaría utilizar la parte de la patched jquery plugin jquery-fieldselection

mediante los que puede llamar

$('#my_text_input').setSelection({"start":0, "end":0}); // leaves the cursor at the left 

o utilizar esta versión reducida que los lugares el cursor al final del texto (de forma predeterminada)

(function() { 
var fieldSelection = { 
    setSelection: function() { 
     var e = (this.jquery) ? this[0] : this, len = this.val().length || ; 
     var args = arguments[0] || {"start":len, "end":len}; 
     /* mozilla/dom 3.0 */ 
     if ('selectionStart' in e) { 
      if (args.start != undefined) { 
       e.selectionStart = args.start; 
      } 
      if (args.end != undefined) { 
       e.selectionEnd = args.end; 
      } 
      e.focus(); 
     } 
     /* exploder */ 
     else if (document.selection) { 
      e.focus(); 
      var range = document.selection.createRange(); 
      if (args.start != undefined) { 
       range.moveStart('character', args.start); 
       range.collapse(); 
      } 
      if (args.end != undefined) { 
       range.moveEnd('character', args.end); 
      } 
      range.select(); 
     } 
     return this; 
    } 
}; 
jQuery.each(fieldSelection, function(i) { jQuery.fn[i] = this; }); 
})(); 

utiliza de esta manera:

$('#my_text_input').setSelection(); // leaves the cursor at the right 
0

Me gustaría sugerir una solución simple

$("input[type=text]").focus(function() { 
    $(this).select(); 
}); 

$("input[type=text]").blur(function() { 
    $('input[type="hidden"][value=""]').select(); 
}); 

//code.... 

$("#txt1").focus(); 
0

Aquí es una solución sencilla y sin jQuery

<input type="text" onblur="this.selectionStart = this.selectionEnd = -1;"> 
Cuestiones relacionadas