【问题标题】:Disable backspace in textbox via javascript通过javascript在文本框中禁用退格
【发布时间】:2009-12-21 02:54:33
【问题描述】:

我有一个由 Ajax 控件工具包日历扩展的文本框。

我想让用户无法编辑文本框,而必须使用日历扩展器进行输入。

我已经成功阻止了除退格之外的所有键!

这是我目前所拥有的:

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

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

编辑

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

编辑

原来 onKeyDown="javascript: return false;"确实有效。我不知道为什么它以前不起作用。我尝试使用一个新的文本框,它很好地阻止了退格。非常抱歉所有发布答案希望得到一些代表的人。在我将其标记为赏金之后。

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

【问题讨论】:

    标签: asp.net javascript textbox backspace


    【解决方案1】:

    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。

    【讨论】:

    • 非常明智,看起来很完美..:) 太糟糕了,安德鲁找到了自己的解决方案..;)
    【解决方案2】:

    你不能只使用 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 等价物备份它吗?
    • TextBoxes 应该有 ReadOnly 属性:msdn.microsoft.com/en-us/library/…
    • 我相信它是 ReadOnly="true"。它不允许 readonly="readonly"。我试过 ReadOnly="true",但不幸的是,它不能很好地与日历扩展器和验证配合使用。
    • 它在服务器控件上是ReadOnly="true",但正如答案(HTML)中所写的那样很好。我们将它与 CalendarExtender 控件一起使用,虽然我们在回发值方面遇到了一些问题,但我们最终还是让它工作了。
    • 如果在服务器控件上设置只读会产生问题,那么在客户端上设置是一个更好的解决方案,这样控件在服务器上的工作方式与未设置为只读时完全相同。而且它还将承担浏览器中脚本引擎的负载,因为您不会执行太多代码。没有事件,什么都没有。只需在 document.onload 上设置一些东西。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        正如其他人所说,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="true" 的位置。

        我有一种感觉:

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

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

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

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

              【讨论】:

                【解决方案9】:

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

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

                【讨论】:

                  【解决方案10】:

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

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

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

                  仍然是一个 JS 菜鸟,所以请随意指出这方面的好坏处。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-05-06
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多