2010-12-16 9 views
10

Tenemos un control de selector de fecha JQuery en un cuadro de texto de solo lectura. Hacemos que el cuadro de texto sea solo leído para que los usuarios no puedan ingresar sus propias fechas. Esto funciona muy bien, pero queremos ofrecer a los usuarios la opción de borrar el contenido del cuadro de texto después de haber seleccionado una fecha.¿Cómo borrar un cuadro de texto del selector de fechas jQuery de solo lectura?

¿Cómo se puede hacer esto? Al parecer, esta funcionalidad solía estar integrada en el control, pero era removed.

Nota: nos desactivar la entrada en el cuadro de texto usando:

$("#text-box").keypress(function (e) 
{ 
    e.preventDefault(); 
}); 

actualización: He resuelto esto con una ligera variación de la respuesta seleccionada:

myTextBox.keydown(function(e){ 
     if (e.keyCode == 46 || e.keyCode == 8) { 
      //Delete and backspace clear text 
      $(this).val(''); //Clear text 
      $(this).datepicker("hide"); //Hide the datepicker calendar if displayed 
      $(this).blur(); //aka "unfocus" 
     } 

     //Prevent user from manually entering in a date - have to use the datepicker box 
     e.preventDefault(); 
    }); 
+1

debería haber respondido a su pregunta en lugar de actualizar la solución en cuestión y marcar la solución incorrecta como respuesta. Definitivamente ahorrará tiempo a muchos usuarios como yo que pasaron horas implementando su 'respuesta marcada' y luego descubriendo que no era la respuesta correcta. y la respuesta correcta está en duda como actualización. –

Respuesta

6

¿Qué hay de exclusión keys que usa el usuario para borrar el cuadro de texto como 'del', 'backspace', etc.?

$("#text-box").keypress(function (e) 
{ 
    switch(e.keyCode) { 
      case 46: // delete 
      case 8: // backspace 
      break; 
      default: 
      e.preventDefault(); 
      break; 
     } 
}); 
+1

la pulsación de tecla no funciona para eliminar y retroceder en realidad. http://stackoverflow.com/a/1116253/2660342 –

2
 
$("#text-box").bind('keypress keydown', function (e) { 
    var tag = e.target.tagName; 
    if (e.which === 8 || e.which === 46) { 
    $(this).val(''); 
    $(this).datepicker("hide"); 
    $(this).blur(); 
    e.stopPropagation(); 
    e.preventDefault(); 
    return false; 
    } 
}); 

Esto debería funcionar en navegadores que don't trigger keypress events for "delete" keys.

Cuestiones relacionadas