Pergunta

Eu tenho uma caixa de texto que é estendida por um calendário do kit de ferramentas de controle AJAX.

Quero fazê -lo para que o usuário não possa editar a caixa de texto e, em vez disso, terá que usar o extensor do calendário para entrada.

Consegui bloquear todas as chaves, exceto o backspace!

É isso que tenho até agora:

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

Como eu também desativaria o backspace dentro da caixa de texto usando JavaScript?

EDITAR

Fiz uma edição, pois preciso de uma solução no JavaScript.

EDITAR

Acontece que onkeydown = "JavaScript: retornar false;" Funciona. Não tenho ideia de por que não estava funcionando antes. Tentei usar uma nova caixa de texto e bloqueou backspaces bem. Sinto muito a todos que postaram uma resposta na esperança de obter alguns representantes esp. Depois que eu o marquei para recompensa.

Minhas caixas de texto agora (parecem) bloquear todas as teclas e ainda funcionam com o extensor do calendário.

Foi útil?

Solução

ZX12R estava próximo. Esta é a solução correta:

A caixa de texto é assim:

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

E o script se parece com o seguinte:

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

Primeiro de tudo, o backspace não aparecerá no Key Press, então você deve usar a tecla para baixo.

Outras dicas

Você não pode simplesmente usar o html readonly="readonly" atributo?

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

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

Que tal usar um rótulo para a tela e uma caixa de texto oculta para obter o valor de volta ao servidor?

Você precisa aplicar a leitura apenas no controlador do lado do cliente, para que o ASP.NET não o veja e ainda lê os dados no postback. Você pode fazer isso de várias maneiras, mais fácil se você usar o jQuery é adicionar uma classe às caixas de texto, por exemplo. cssclass="readonly" em questão e $(".readonly").attr("readonly", true);.

Como outros disseram ReadOnly = "True" quebrará o mecanismo de postback.

Eu acredito que você pode contornar isso em seu código-behind, acessando o objeto de solicitação diretamente durante o Pageload:

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

Sua outra opção é permitir que os controles de desativação de postagem no formulário, mas isso é uma preocupação de segurança, pois os campos reado -de -reado modificados por script podem potencialmente voltar:

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

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

Não tenho certeza se o impacto dessa propriedade no ReadOnly (vs ativado = "false") controla, mas vale a pena tentar.

E, finalmente - eu encontrei o mesmo problema que você está tendo há alguns anos e, pelo que me lembro, há uma diferença entre usar uma entrada HTML marcada como ReadOnly e Runat = "Server" e um controle real do servidor onde Readonlyly = "true".

Tenho a sensação de fazer:

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

Ainda pode ter permitido que os dados aparecessem, embora no código-behind você deva tratar o controle como um htmlinputtext ou htmlgenericcontrol vs. uma caixa de texto. Você ainda pode acessar as propriedades necessárias.

Apenas algumas idéias de qualquer maneira ...

Aqui está uma solução possível ... adicione um ouvinte de evento ...

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

E então a função pode ser assim ..

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

Dúvida se tem que ser onkeypress ou onkeyp ...

O atributo readonly não ajuda. O backspace ainda está levando seu navegador para a página traseira, mesmo que sua caixa de texto seja apenas leitura ..

Use caixas de texto regulares não somente leitura e não desativadas, basta usar o JavaScript do lado do cliente para ignorar as teclas. Isso ignorará todo o KeyPress para que você tenha seu comportamento reado e também ignorará o backspace.

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

Não há necessidade de chamar qualquer função e tudo apenas tente isso:

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

Consegui fazer algo semelhante, com jQuery. Apenas colocando isso aqui para referência!

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

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

O primeiro impede as teclas, enquanto o segundo evita eventos de chave para baixo.

Ainda é um JS Noob, então fique à vontade para apontar coisas boas / ruins com isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top