11

我有一个由 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;" 确实有效。我不知道为什么它以前不起作用。我尝试使用一个新的文本框,它很好地阻止了退格。非常抱歉所有发布答案希望得到一些代表的人。在我将其标记为赏金之后。

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

4

10 回答 10

38

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

文本框是这样的:

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

于 2010-03-04T21:51:35.600 回答
8

你不能只使用 HTMLreadonly="readonly"属性吗?

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

<textarea rows="3" cols="25" readonly="readonly">
It should work! :)
</textarea>
于 2009-12-21T02:59:34.293 回答
4

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

于 2009-12-21T04:45:26.753 回答
2

您只需要在客户端控制器上应用只读,这样 asp.net 就看不到它,并且仍然在回发时读取数据。您可以通过多种方式执行此操作,如果您使用 jQuery,其中一种更简单的方法是将类添加到文本框,例如。cssclass="readonly"有问题和$(".readonly").attr("readonly", true);

于 2010-03-06T16:50:25.337 回答
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") 控件的影响,但值得一试。

最后 - 几年前我确实遇到了同样的问题,据我所知,使用标记为只读和 runat="server" 的 html 输入与使用 ReadOnly 的实际服务器端控件之间存在差异=“真”。

我有一种感觉:

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

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

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

于 2009-12-22T21:16:50.080 回答
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 ......

于 2010-03-04T06:14:34.910 回答
0

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

于 2010-03-08T12:42:03.117 回答
0

使用非只读且未禁用的常规文本框,只需使用客户端 JavaScript 忽略按键。这将忽略所有按键,因此您将拥有 READONLY 行为,并且还将忽略退格键。

<input type="text" value="Your Text Here" onkeydown="return false;" />
于 2011-04-03T15:53:34.753 回答
0

无需调用任何函数,只需尝试以下操作:

<asp:TextBox runat="server" ID="txt" onkeydown="return false;" 
    onpaste = "return false;" onkeypress="return false;" />
于 2012-03-01T18:59:01.410 回答
0

我可以用 Jquery 做类似的事情。只是放在这里供参考!

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

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

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

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

于 2012-11-30T16:16:40.023 回答