2009-12-21 45 views
11

Tôi có một hộp văn bản được mở rộng bằng một lịch Bộ công cụ kiểm soát Ajax.Vô hiệu hóa backspace trong hộp văn bản qua javascript

Tôi muốn làm cho nó để người dùng không thể chỉnh sửa hộp văn bản và sẽ phải thay vào đó sử dụng bộ mở rộng lịch cho đầu vào.

Tôi đã quản lý để chặn tất cả các khóa ngoại trừ backspace!

Đây là những gì tôi có cho đến nay:

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

Làm thế nào tôi cũng vô hiệu hóa phím lùi trong textbox sử dụng javascript?

EDIT

Made một chỉnh sửa kể từ khi tôi cần một giải pháp trong javascript.

EDIT

Nó chỉ ra rằng onKeyDown = "javascript: return false;" Làm việc. Tôi không biết tại sao nó không hoạt động trước đây. Tôi đã thử sử dụng một hộp văn bản mới và nó bị chặn không gian tốt. Vì vậy, xin lỗi cho tất cả những người đăng một câu trả lời hy vọng để có được một số đặc biệt rep. sau khi tôi đánh dấu nó là tiền thưởng.

Hộp văn bản của tôi bây giờ (dường như) để chặn TẤT CẢ tổ hợp phím và cũng vẫn hoạt động với bộ mở rộng lịch.

Trả lời

36

ZX12R là gần. Đây là giải pháp đúng:

Các TextBox là như thế này:

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

và kịch bản trông như thế này:

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

Trước hết, các phím lùi sẽ không đi qua trên chính Press, vì vậy bạn phải sử dụng Key Down.

+0

rất hợp lý và có vẻ hoàn hảo .. :) quá xấu Andrew tìm thấy giải pháp của riêng mình ..;) – ZX12R

+0

+1 cho thông tin backspace và keyPress. – Nirmal

+0

+1 cho thông tin này :) –

8

Bạn không thể sử dụng thuộc tính HTML readonly="readonly"?

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

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

Hãy cẩn thận để sao lưu bằng ASP.NET tương đương? –

+0

TextBoxes phải có thuộc tính ReadOnly: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.readonly.aspx –

+0

Tôi tin rằng đó là ReadOnly = "true". Nó không cho phép readonly = "readonly". Tôi đã thử ReadOnly = "true", nhưng thật không may, nó không chơi độc đáo với phần mở rộng lịch và xác thực. – Andrew

4

Cách sử dụng nhãn cho màn hình và hộp văn bản ẩn để lấy lại giá trị cho máy chủ?

1

Khi người khác nói ReadOnly = "True" sẽ phá vỡ cơ chế postback.

Tôi tin rằng bạn có thể nhận được xung quanh nó trong bạn code-behind bằng cách truy cập các đối tượng yêu cầu trực tiếp trong PageLoad:

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

tùy chọn khác của bạn là cho phép tàn tật điều khiển để postback về hình thức, nhưng điều này là hơi của một mối quan tâm an ninh như các lĩnh vực readonly sửa đổi thông qua kịch bản có khả năng có thể trở lại:

<form id="MyForm" runat="server" SubmitDisabledControls="True"> 
.. 
</form> 

http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlform.submitdisabledcontrols.aspx

tôi không chắc chắn tác động của thuộc tính này trên các điều khiển ReadOnly (vs Enabled = "False") nhưng đáng để thử.

Và cuối cùng - tôi đã gặp phải vấn đề tương tự bạn đang gặp vài năm trước và từ những gì tôi nhớ có sự khác biệt giữa việc sử dụng đầu vào html được đánh dấu là readonly và runat = "server". serverside kiểm soát nơi ReadOnly = "true".

Tôi có một cảm giác thực hiện:

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

có thể vẫn cho phép các dữ liệu đi qua, mặc dù trong code-behind bạn phải đối xử với sự kiểm soát như một HtmlInputText hoặc HtmlGenericControl vs một TextBox. Bạn vẫn có thể truy cập các thuộc tính mà bạn cần.

Chỉ cần một vài ý tưởng anyway ...

0

đây là một giải pháp khả thi ... nghe thêm một sự kiện ...

<asp:TextBox ID="TextBox1" runat="server" onKeyPress="KeyCheck;" /> 

và sau đó là chức năng có thể được như thế này ..

function KeyCheck(e) { 
var KeyID = (window.event) ? event.keyCode : e.keyCode; 
if (KeyID == 8) { 
    alert('no backspaces!!); 
} 
} 

nghi ngờ nếu nó đã được onkeypress hoặc onkeyup ...

2

Bạn cần phải áp dụng chỉ đọc trên bộ điều khiển phía khách, CHỈ để asp.net không nhìn thấy nó và vẫn đọc dữ liệu trên postback. Bạn có thể làm điều này theo nhiều cách, một trong những cách dễ dàng hơn nếu bạn sử dụng jQuery là thêm một lớp vào các hộp văn bản ví dụ. cssclass="readonly" được đề cập và $(".readonly").attr("readonly", true);.

0

Thuộc tính ReadOnly không hữu ích. Phím backspace vẫn đang đưa trình duyệt của bạn trở lại trang ngay cả khi hộp văn bản của bạn chỉ đọc ..

0

sử dụng các hộp văn bản thông thường không chỉ đọc và không bị vô hiệu hóa, chỉ cần sử dụng JavaScript phía máy khách để bỏ qua các lần nhấn phím. Điều này sẽ bỏ qua tất cả các phím bấm để bạn sẽ có hành vi READONLY của bạn và nó cũng sẽ bỏ qua backspace.

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

Không cần gọi bất kỳ chức năng và tất cả chỉ là thử điều này:

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

tôi đã có thể làm điều gì đó tương tự, với Jquery. Chỉ cần đưa nó ra đây để tham khảo!

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

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

lần đầu tiên ngăn phím bấm, trong khi ngăn thứ hai ngăn chặn các sự kiện chính.

Vẫn là một JS noob, do đó, vui lòng chỉ ra những điều tốt/xấu với điều này.

Các vấn đề liên quan