2009-12-21 2 views
11

У меня есть текстовое поле, которое расширено календарем Ajax Control Toolkit.Отключить backspace в текстовом поле с помощью javascript

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

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

Это то, что я до сих пор:

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

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

EDIT

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

EDIT

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

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

ответ

36

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.

+0

очень разумный и кажется идеальным .. :) слишком плохо Андрей нашел свое собственное решение ..;) – ZX12R

+0

+1 для backspace и keyPress info. – Nirmal

+0

+1 для этой информации :) –

8

Не можете ли вы использовать атрибут HTML readonly="readonly"?

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

<textarea rows="3" cols="25" readonly="readonly"> 
It should work! :) 
</textarea> 
+0

Ухаживать за этим с помощью ASP.NET-эквивалента? –

+0

TextBox должны иметь свойство ReadOnly: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.readonly.aspx –

+0

Я считаю, что это ReadOnly = "true". Это не позволяет readonly = "readonly". Я попробовал ReadOnly = "true", но, к сожалению, он не очень хорошо работает с расширителем календаря и проверкой. – Andrew

4

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

1

Как было сказано, ReadOnly = «True» нарушит механизм обратной передачи.

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

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

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

У меня есть чувство делает:

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

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

Просто несколько идей, так или иначе ...

0

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

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

2

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

0

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

0

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

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

Нет необходимости, чтобы вызвать любую функцию, и все просто попробуйте это:

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

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

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

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

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

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

Смежные вопросы