2009-12-21 7 views
11

Ho una casella di testo estesa da un calendario Ajax Control Toolkit.Disabilita il backspace nella casella di testo tramite javascript

Voglio fare in modo che l'utente non possa modificare la casella di testo e dovrà invece utilizzare l'estensione del calendario per l'input.

Sono riuscito a bloccare tutte le chiavi tranne il backspace!

Questo è quello che ho finora:

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

Come potrei anche backspace disabilitare all'interno del testo utilizzando JavaScript?

EDIT

fatto una modifica da quando ho bisogno di una soluzione in javascript.

EDIT

Si scopre che onKeyDown = "javascript: return false;" Funziona. Non ho idea del motivo per cui non funzionava prima. Ho provato a utilizzare una nuova casella di testo e ha bloccato i backspaces. Mi dispiace per tutti quelli che hanno postato una risposta sperando di ottenere qualche risposta. dopo che l'ho segnato per la taglia.

Ora le mie caselle di testo (sembrano) bloccano TUTTE le sequenze di tasti e funzionano anche con l'estensione del calendario.

risposta

36

ZX12R era vicino. Questa è la soluzione corretta:

Il TextBox è come questo:

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

e lo script è simile al seguente:

<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> 

Prima di tutto, il backspace solito venire attraverso il Tasto, quindi devi usare Key Down.

+0

molto ragionevole e sembra perfetto .. :) troppo male Andrew ha trovato la sua soluzione ..;) – ZX12R

+0

+1 per il backspace e la chiave Info stampa. – Nirmal

+0

+1 per questa informazione :) –

8

Non puoi semplicemente utilizzare l'attributo HTML readonly="readonly"?

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

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

È necessario eseguire il backup con un equivalente ASP.NET? –

+0

I TextBox dovrebbero avere la proprietà ReadOnly: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.readonly.aspx –

+0

Credo che sia ReadOnly = "true". Non consente readonly = "readonly". Ho provato ReadOnly = "true", ma sfortunatamente non funziona bene con l'estensione e la validazione del calendario. – Andrew

4

ne dite di usare un'etichetta per il display e una casella di testo nascosto per ottenere il valore al server?

1

Come altri hanno dichiarato ReadOnly = "True" interromperà il meccanismo di postback.

io credo che si può andare in giro nel vostro code-behind accedendo l'oggetto Request direttamente durante PageLoad:

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

L'altra opzione è quella di consentire controlli disabilitati al postback sulla forma, ma questo è un po ' di un problema di sicurezza come campi di sola lettura modificati tramite script potenzialmente potrebbero tornare:

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

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

non sono sicuro l'impatto di questa proprietà su ReadOnly (vs Enabled = "False") controlla ma vale la pena provare.

Infine, ho riscontrato lo stesso problema riscontrato alcuni anni fa, e da quello che ricordo c'è una differenza tra l'utilizzo di un input html contrassegnato come readonly e runat = "server" e un effettivo controllo serveride dove ReadOnly = "true".

ho la sensazione di fare:

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

possono avere ancora il permesso dei dati a venire attraverso, anche se nel code-behind è necessario trattare il controllo come un HtmlInputText o HtmlGenericControl rispetto a un TextBox. Puoi comunque accedere alle proprietà che ti servono.

solo alcune idee comunque ...

0

ecco una possibile soluzione ... aggiungi un listener di eventi ...

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

e quindi la funzione può essere come questo ..

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

dubbio se deve essere onkeypress o onkeyup ...

2

È necessario applicare SOLO readonly sul controller lato client SOLO, in modo che asp.net non lo veda e continui a leggere i dati sul postback. Puoi farlo in diversi modi, uno dei più semplici se usi jQuery è quello di aggiungere una classe alle caselle di testo es. cssclass="readonly" in questione e $(".readonly").attr("readonly", true);.

0

L'attributo ReadOnly non aiuta. Il backspace riporta il browser alla pagina precedente anche se la casella di testo è di sola lettura.

0

utilizza caselle di testo normali non di sola lettura e non disabilitate, usa solo JavaScript sul lato client per ignorare i tasti premuti. Questo ignorerà tutti i tasti premuti in modo da avere il tuo comportamento READONLY e ignorerà anche il backspace.

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

c'è bisogno di chiamare qualsiasi funzione e tutto solo provare questo:

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

sono stato in grado di fare qualcosa di simile, con jQuery. Basta metterlo qui per riferimento!

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

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

il primo impedisce la pressione dei tasti, mentre il secondo impedisce gli eventi di abbassamento del tasto.

Ancora un JS noob, quindi sentitevi liberi di segnalare cose buone/cattive con questo.