繁体   English   中英

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

[英]Disable backspace in textbox via javascript

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

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

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。

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

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

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

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

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

正如其他人所说 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 和 runat="server" 的 html 输入和实际的服务器端控件之间存在差异,其中 ReadOnly =“真”。

我有一种感觉:

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

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

反正只是一些想法......

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

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM