Отключите клавишу Backspace в текстовом поле с помощью JavaScript

У меня есть текстовое поле, которое расширяется календарем Инструментария Управления Ajax.

Я хочу сделать его так, чтобы пользователь не мог отредактировать текстовое поле и должен был вместо этого использовать календарный расширитель для входа.

Мне удалось заблокировать все ключи кроме клавиши Backspace!

Это - то, что я имею до сих пор:

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

Как я также отключил бы клавишу Backspace в текстовом поле с помощью JavaScript?

Править

Сделанный редактированием, так как мне нужно решение в JavaScript.

Править

Оказывается что onKeyDown = "JavaScript: возвратите false"; ДЕЙСТВИТЕЛЬНО работает. Я понятия не имею, почему это не работало прежде. Я пытался использовать новое текстовое поле, и оно заблокировало прекрасные клавиши Backspace. Очень жаль всем, кто отправил ответ, надеющийся получить некоторого представителя особенно после того, как я отметил его для щедрости.

Мои текстовые поля теперь, (кажется), блокируют ВСЕ нажатия клавиш и также все еще работают с календарным расширителем.

11
задан Andrew 4 March 2010 в 23:11
поделиться

7 ответов

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>

Во-первых, при нажатии клавиши не будет происходить возврат назад, поэтому вы должны использовать клавишу «Вниз».

37
ответ дан 3 December 2019 в 00:56
поделиться

Разве нельзя просто использовать атрибут HTML readonly = "readonly" ?

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

<textarea rows="3" cols="25" readonly="readonly">
It should work! :)
</textarea>
8
ответ дан 3 December 2019 в 00:56
поделиться

Как насчет использования метки для дисплея и скрытого текстового поля, чтобы вернуть значение на сервер?

4
ответ дан 3 December 2019 в 00:56
поделиться

Как говорили другие, ReadOnly = "True" нарушит механизм обратной передачи.

Я считаю, что вы можете обойти это в своем коде программной части, обратившись к объекту Request непосредственно во время PageLoad:

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

Другой вариант - разрешить отключенным элементам управления обратную передачу в форме, но это в некоторой степени является проблемой безопасности, поскольку поля readonly, измененные с помощью скрипта, потенциально могут вернуться:

<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"), но попробовать стоит.

И, наконец, я столкнулся с той же проблемой, с которой вы столкнулись несколько лет назад, и, насколько я помню, есть разница между использованием html-ввода, помеченного как readonly, и runat = "server", и фактический серверный элемент управления, где ReadOnly = "true".

Я чувствую, что делаю:

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

, возможно, все еще позволял прохождение данных, хотя в коде программной части вы должны рассматривать этот элемент управления как HtmlInputText или HtmlGenericControl против TextBox. Однако у вас все еще есть доступ к нужным свойствам.

В любом случае, несколько идей ...

1
ответ дан 3 December 2019 в 00:56
поделиться

вот возможное решение ... добавьте прослушиватель событий ...

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

{ {1}}
0
ответ дан 3 December 2019 в 00:56
поделиться

Вы должны применять только для чтения на клиенте ТОЛЬКО боковой контроллер, чтобы asp.net не видел его и продолжал читать данные при обратной передаче. Вы можете сделать это несколькими способами, один из самых простых, если вы используете jQuery, - это добавить класс в текстовые поля, например. cssclass = "readonly" в вопросе и $ (". Readonly"). Attr ("readonly", true); .

2
ответ дан 3 December 2019 в 00:56
поделиться

Атрибут ReadOnly не помогает. Заднее пространство по-прежнему ведет ваш браузер на заднюю страницу, даже если ваше текстовое поле доступно только для чтения.

0
ответ дан 3 December 2019 в 00:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: