Отключить 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;" работает. Я понятия не имею, почему он не работал раньше. Я попытался использовать новое текстовое поле, и оно заблокировало backspaces. Так жаль всех, кто разместил ответ, надеясь получить некоторую репутацию esp. после того, как я пометил его для награды.

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

10 ответов


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>

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


вы не можете просто использовать HTML


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


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


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

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

//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", и фактическим serverside управления, где ReadOnly= "true".

у меня такое чувство, что я делаю:

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

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

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


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

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


используйте обычные текстовые поля не только для чтения и не отключены, просто используйте JavaScript на стороне клиента, чтобы игнорировать нажатия клавиш. Это будет игнорировать все нажатия клавиш, так что вы будете иметь ваше поведение только для чтения, и он также будет игнорировать backspace.

<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;" />

я смог сделать что-то подобное с Jquery. Просто помещаю его здесь для справки!

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

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

первый предотвращает нажатия клавиш, а второй предотвращает события нажатия клавиш.

все еще JS noob, поэтому не стесняйтесь указывать на хорошие / плохие вещи с этим.