2010-05-05 32 views
7

Tôi muốn sử dụng công cụ date date của Jquery. Tôi đã thiết lập nó bằng cách sử dụng tùy chọn trường alt. Tôi đang hiển thị D/M/Y trong trường văn bản, nhưng gửi Y-M-D. Mọi thứ hoạt động tốt cho đến nay, gửi dữ liệu chính xác, v.v.Bộ chọn ngày jQuery nơi nhập văn bản chỉ đọc

Tuy nhiên tôi muốn ngăn người dùng có thể nhập ngày theo cách thủ công. Ban đầu, tôi đã đặt trường INPUT thành vô hiệu hóa, hoạt động trong mọi trình duyệt ngoại trừ IE. Trong IE nó sẽ bật lên bộ chọn ngày nhưng sau đó không đóng sau khi nhấp vào một ngày.

Có ai biết cách tốt nhất để làm điều này không?

Trả lời

8

Để ngăn người dùng chỉnh sửa thủ công đầu vào, tôi sẽ đính kèm sự kiện nhấn và trả về false/ngăn mặc định từ trình xử lý của nó. Bằng cách này, nếu anh ta có javascript, anh ta có thể sử dụng datepicker, và nếu không anh ta có thể chỉnh sửa thủ công đầu vào. câu trả lời

$("#input-id").keypress(function (e) 
{ 
    e.preventDefault(); 
}); 
+0

Cảm ơn bạn. Đây là một giải pháp thực sự ngắn gọn và nó xử lý thiếu Javascript một cách duyên dáng. –

+2

nếu bạn đang đi tuyến đường đó, nó cũng có thể hữu ích để vô hiệu hóa phím tắt, để ngăn chặn backspace, xóa, vv $ ("# input-id"). Keydown (function (e) \t {e .ngăn chặn Mặc định();}); – dah97765

+0

Tôi thấy phím bấm không thể ngăn chặn backspace, vì vậy giải pháp dah97765 là tốt nhất. –

0

Sau khi vô hiệu hóa trường nhập, hãy sử dụng phương thức hủy để loại bỏ datepicker. Khi kích hoạt lại trường, chỉ cần tạo lại datepicker một lần nữa.

$("#target").datepicker("destroy"); 
3

Mở rộng nc3b của:

$("#input-id").keydown(function (e) 
{e.preventDefault();}); 

sẽ ngăn chặn các phím như backspace, xóa, vv Nếu không, bạn có thể có một ngày như 2012/11/11, và người dùng có thể Backspace nó để 11/11/201 và về mặt kỹ thuật, đó vẫn là ngày hợp lệ theo JS.

+1

Cảm ơn. Điều này tốt hơn câu trả lời đúng. +1 – Jignesh

+0

Bấm phím cũng sẽ không cho phép dán bản sao. ít nhất nó làm việc cho tôi. – Jignesh

1

Bạn cũng có thể làm điều này:

<input type="text" id="datepicker" name="datepicker" readonly="readonly" /> 

Xem thuộc tính readonly trên.

Nếu bạn cũng muốn lịch để hiển thị khi người <input> có trọng tâm, thêm này:

$("#datepicker").datepicker({ showOn: 'both' }); 
Các vấn đề liên quan