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