通过javascript禁用文本框中的退格键

时间:2009-12-21 02:54:34

标签: asp.net javascript textbox backspace

我有一个由Ajax Control Toolkit日历扩展的文本框。

我想这样做,以便用户无法编辑文本框,而是必须使用日历扩展程序进行输入。

我设法阻止除退格之外的所有键!

这是我到目前为止所做的:

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

如何使用javascript在文本框中禁用退格键?

修改

因为我需要javascript中的解决方案而进行了编辑。

修改

事实证明,onKeyDown =“javascript:return false;”做的工作。我不知道它为什么以前没有工作。我尝试使用新的文本框,它可以很好地阻止退格。很抱歉每个发布答案的人都希望得到一些代表。在我标记为赏金之后。

我的文本框现在(似乎)阻止所有击键,并且仍然可以使用日历扩展器。

10 个答案:

答案 0 :(得分:36)

ZX12R很接近。这是正确的解决方案:

TextBox是这样的:

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

,脚本如下所示:

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

首先,退格键不会通过Key Press进行,因此您必须使用Key Down。

答案 1 :(得分:8)

您不能只使用HTML readonly="readonly"属性吗?

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

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

答案 2 :(得分:4)

如何使用显示标签和隐藏文本框将值返回服务器?

答案 3 :(得分:2)

您需要仅在客户端控制器上应用readonly,以便asp.net不会看到它并仍然在回发时读取数据。你可以用几种方法做到这一点,如果你使用jQuery就更容易将一个类添加到文本框中,例如。问题cssclass="readonly"$(".readonly").attr("readonly", true);

答案 4 :(得分:1)

正如其他人所说,ReadOnly =“True”将打破回发机制。

我相信您可以通过在PageLoad期间直接访问Request对象来解决代码问题:

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

您的另一个选择是允许禁用控件在表单上回发,但这有点安全,因为通过脚本修改的只读字段可能会回来:

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

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

我不确定此属性对ReadOnly(vs Enabled =“False”)控件的影响,但值得尝试。

最后 - 我确实碰到了几年前你遇到的同一个问题,而且从我记忆中看,使用标记为readonly的html输入和runat =“server”以及实际的服务器端之间存在差异控制ReadOnly =“true”。

我有一种感觉:

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

可能仍然允许数据通过,但在代码隐藏中,您必须将控件视为HtmlInputText或HtmlGenericControl与TextBox。您仍然可以访问所需的属性。

无论如何只是一些想法......

答案 5 :(得分:0)

这是一个可能的解决方案......添加一个事件监听器......

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

然后功能就像这样..

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

怀疑它是否必须是onkeypress或onkeyup ...

答案 6 :(得分:0)

ReadOnly属性没有帮助。即使您的文本框是只读的,退格仍然会使您的浏览器返回页面。

答案 7 :(得分:0)

使用常规文本框不是只读而不是禁用,只需使用客户端JavaScript忽略按键。 这将忽略所有按键,因此您将具有READONLY行为,并且它也将忽略退格。

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

答案 8 :(得分:0)

无需调用任何功能,只需尝试此操作:

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

答案 9 :(得分:0)

我能够用Jquery做类似的事情。把它放在这里作为参考!

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

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

第一个可以防止按键,而第二个可以防止按键事件。

仍然是一个JS菜鸟,所以请随意指出好/坏的事情。