Отключить backspace в текстовом поле с помощью javascript

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

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

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

Это то, что у меня есть до сих пор:

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

Как я также отключить backspace в текстовом поле с помощью javascript?

ИЗМЕНИТЬ

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

ИЗМЕНИТЬ

Оказывается, onKeyDown = "javascript: return false;" Работает. Я понятия не имею, почему он не работал раньше. Я попытался использовать новое текстовое поле, и он заблокировал обратные помехи. Так жаль всех, кто отправил ответ, надеясь получить какую-то репутацию. после того, как я отметил его за щедрость.

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

Ответ 1

ZX12R был близок. Это правильное решение:

TextBox выглядит следующим образом:

    <asp:TextBox ID="TextBox1" runat="server" onKeyDown="preventBackspace();"></asp:TextBox>

и script выглядит следующим образом:

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

Прежде всего, backspace не будет проходить через 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>

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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

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

<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. Вы все равно можете получить доступ к свойствам, которые вам нужны.

Всего несколько идей...

Ответ 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 не помогает. Backspace все еще берет ваш браузер на обратную страницу, даже если ваше текстовое поле доступно только для чтения.

Ответ 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 noob, поэтому не стесняйтесь указывать на это хорошие/плохие вещи.