2009-12-21 7 views
11

Tengo un cuadro de texto que se amplía con un calendario de Ajax Control Toolkit.Deshabilitar el retroceso en el cuadro de texto a través de javascript

Quiero hacer que el usuario no pueda editar el cuadro de texto y tendrá que usar el extensor de calendario para la entrada.

¡He logrado bloquear todas las teclas excepto el retroceso!

Esto es lo que tengo hasta ahora:

<asp:TextBox ID="TextBox1" runat="server" onKeyPress="javascript: return false;" onKeyDown="javascript: return false;" onPaste="javascript: return false;" /> 

¿Cómo podría también desactivar la tecla de retroceso en el cuadro de texto usando javascript?

EDITAR

realizó una edición ya que necesito una solución en javascript.

EDITAR

Resulta que onKeyDown = "javascript: return false;" Funciona. No tengo idea de por qué no estaba funcionando antes. Intenté usar un nuevo cuadro de texto y bloqueó los espacios de respaldo correctamente. Lo siento por todos los que publicaron una respuesta con la esperanza de obtener un representante esp. después de que lo marqué como recompensa.

Mis cuadros de texto ahora (parecen) para bloquear TODAS las pulsaciones de teclas y también funcionan con el extensor de calendario.

Respuesta

36

ZX12R estaba cerca. Esta es la solución correcta:

El cuadro de texto es como sigue:

<asp:TextBox ID="TextBox1" runat="server" onKeyDown="preventBackspace();"></asp:TextBox> 

y el guión es el siguiente:

<script type="text/javascript"> 
    function preventBackspace(e) { 
     var evt = e || window.event; 
     if (evt) { 
      var keyCode = evt.charCode || evt.keyCode; 
      if (keyCode === 8) { 
       if (evt.preventDefault) { 
        evt.preventDefault(); 
       } else { 
        evt.returnValue = false; 
       } 
      } 
     } 
    } 
</script> 

En primer lugar, el retroceso no vendrá a través de la pulsación de tecla, entonces debes usar Key Down.

+0

muy sensible y parece perfecto ... :) lástima Andrew encontró su propia solución ...;) – ZX12R

+0

+1 para el retroceso y la información de tecla. – Nirmal

+0

+1 para esta información :) –

8

¿No puede simplemente usar el atributo HTML readonly="readonly"?

<input type="text" name="country" value="Norway" readonly="readonly" /> 

<textarea rows="3" cols="25" readonly="readonly"> 
It should work! :) 
</textarea> 
+0

¿Cuidar para respaldar eso con un equivalente de ASP.NET? –

+0

TextBoxes debería tener la propiedad ReadOnly: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.readonly.aspx –

+0

Creo que es ReadOnly = "true". No permite readonly = "readonly". Intenté ReadOnly = "true", pero desafortunadamente no funciona bien con el extensor de calendario y la validación. – Andrew

4

¿Qué le parece usar una etiqueta para la pantalla y un cuadro de texto oculto para recuperar el valor en el servidor?

1

Como otros dijeron ReadOnly = "True" romperá el mecanismo de devolución de datos.

Creo que se puede conseguir alrededor de él en su código subyacente mediante el acceso al objeto Request directamente durante pageLoad:

//assuming your textbox ID is 'txtDate' 
if(Page.IsPostBack) 
{ 
    this.txtDate.Text = Request[this.txtDate.UniqueID]; 
} 

Su otra opción es permitir que personas de movilidad reducida controla a la devolución de datos en el formulario, pero esto es algo de un problema de seguridad como campos de sólo lectura a través de script modificados podrían potencialmente volver:

<form id="MyForm" runat="server" SubmitDisabledControls="True"> 
.. 
</form> 

http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlform.submitdisabledcontrols.aspx

no estoy seguro el impacto de esta propiedad en ReadOnly (vs Enabled = "False") controla, pero vale la pena intentarlo.

Y finalmente - me encontré con el mismo problema que tiene hace unos años, y por lo que recuerdo hay una diferencia entre usar una entrada html marcada como readonly y runat = "server", y una real control del servidor donde ReadOnly = "true".

tengo la sensación de hacer:

<input type="text" readonly="readonly" runat="server" id="myTextBox" /> 

pueden tener todavía permitido a los datos que vienen a través, aunque en el código subyacente que tiene que tratar el control como un HtmlInputText o HtmlGenericControl frente a un cuadro de texto. Sin embargo, puede acceder a las propiedades que necesita.

sólo algunas ideas de todos modos ...

0

aquí es una posible solución ... añadir un detector de eventos ...

<asp:TextBox ID="TextBox1" runat="server" onKeyPress="KeyCheck;" /> 

y entonces la función puede ser así ..

function KeyCheck(e) { 
var KeyID = (window.event) ? event.keyCode : e.keyCode; 
if (KeyID == 8) { 
    alert('no backspaces!!); 
} 
} 

duda de si tiene que ser onkeypress o onkeyup ...

2

Necesita aplicar SOLO LISTA en el controlador del lado del cliente, para que asp.net no lo vea y siga leyendo los datos en la devolución. Puedes hacer esto de varias maneras, una de las más sencillas si usas jQuery es agregar una clase a los cuadros de texto, por ejemplo. cssclass="readonly" en cuestión y $(".readonly").attr("readonly", true);.

0

El atributo ReadOnly no ayuda. El retroceso todavía lleva al navegador a la página posterior incluso si su cuadro de texto es de solo lectura.

0

use los cuadros de texto regulares no solo de lectura y no deshabilitados, solo use el JavaScript del lado del cliente para ignorar las pulsaciones de teclas. Esto ignorará todas las pulsaciones de teclas, por lo que tendrá su comportamiento READONLY y también ignorará el retroceso.

<input type="text" value="Your Text Here" onkeydown="return false;" /> 
0

hay necesidad de llamar a cualquier función y todos Intenta esto:

<asp:TextBox runat="server" ID="txt" onkeydown="return false;" 
    onpaste = "return false;" onkeypress="return false;" /> 
0

que era capaz de hacer algo similar, con jQuery. ¡Solo ponlo aquí para referencia!

$("#inputID").keypress(function (e) 
{e.preventDefault();}); 

$("#inputID").keydown(function (e) 
{e.preventDefault();}); 

la primera evita las pulsaciones de teclas, mientras que la segunda evita los eventos de pulsación de teclas.

Todavía un novato JS, así que siéntete libre de señalar cosas buenas/malas con esto.

Cuestiones relacionadas