2013-05-07 36 views
7

Chỉ cần tình cờ gặp một số điều kỳ lạ trong jQuery, trong khi viết một số mã xác nhận- Tôi có trường "số" html5;jQuery val từ chối trả về đầu vào không phải số từ trường số (Trong Chrome)

<input type="number" class="required numeric" /> 

Kịch bản của tôi sẽ xem xét mọi trường trên trang kiểm tra các lớp và xác thực khi cần. Tôi nhận thấy một cách kỳ lạ rằng nếu tôi nhập 'X' vào một trong các trường số của tôi, tôi nhận được lỗi "Vui lòng nhập giá trị vào trường này" thay vì lỗi "đây phải là số". Sau khi một số đầu gãi và rất nhiều gỡ lỗi tôi gõ lên một jsFiddle để giới thiệu lý thuyết của tôi-nó xuất hiện nếu bạn nhập một ký tự vào một trường số, sau đó cố gắng làm một .val() từ jquery nó sẽ trả về không có gì - như thể trường trống (Tôi đã xem qua điều này trong Chrome- không chắc chắn nếu nó hoạt động như thế này trên tất cả các trình duyệt);

http://jsfiddle.net/shawson/SE46L/3/

Đây là fiddle- nhập một số con số, sau đó một vài chữ cái để xem crazyness. Bất cứ ai biết nếu điều này là do thiết kế, và nếu như vậy ... tại sao?

+1

trình trong Firefox, Chrome phải cụ thể, và tôi đoán Safari quá như nó ám chỉ rằng "số lượng" thuộc tính giống nhau. –

+0

Làm thế nào gây phiền nhiễu- có chỉ cần thử IE10 và hoạt động tốt với nó! – Shawson

+0

Đây không phải là một vấn đề jQuery - bản thân phần tử trả về một chuỗi rỗng cho đầu vào không phải là số. – Alnitak

Trả lời

9

Đây không phải là vấn đề về jQuery. Bạn sẽ nhận được kết quả tương tự nếu bạn sử dụng phần tử gốc.value (ví dụ: với getElementByID ('something'). Value). Đó là cách giải thích cách Chrome xử lý với loại đầu vào = số và bạn có thể chọn để làm việc xung quanh nó bằng cách sử dụng type = text và thuộc tính pattern.

Xem this older question để biết thêm thông tin cơ bản.

+0

Có tiếng hét tốt- Tôi vừa chuyển chúng sang " văn bản "các trường ngay bây giờ. – Shawson

+4

Điều này có nhược điểm là A) mũi tên lên và xuống để dễ dàng nhập số nguyên nhỏ biến mất và B) trên màn hình di động (máy tính bảng, điện thoại thông minh) bàn phím sẽ không tự động hiển thị số mà thay vào đó là bàn phím abc đầy đủ. – user1884155

+0

"quirk" là thông số: https://www.w3.org/TR/html5/forms.html#number-state-(type=number): "Nếu giá trị của phần tử không phải là một dấu phẩy động hợp lệ số điểm, sau đó đặt nó thành chuỗi trống thay thế ". Nếu bạn nhận được một chuỗi rỗng và muốn giá trị không hợp lệ: tạm thời thay đổi kiểu đầu vào thành "văn bản", hãy truy lục lại giá trị, chuyển nó trở lại thành type = "number" –

1

Đến cùng một vấn đề trong Chrome, sẽ không cung cấp giá trị cho loại = số khi chúng không phải là số. Công việc xung quanh tôi đặt vào là chỉ cần đặt giá trị cho giá trị của chính nó. Bằng cách đó, nó sẽ không cho phép bạn nhập các giá trị không phải số ở vị trí đầu tiên. Đó là một hack nhưng nó hoạt động.

ví dụ:

$('body').find('input[type="number"]').each(function(k,v) { 

    $(this).on('keyup blur', function() { 
     $(this).val($(this).val()); 
    }); 

}); 
+1

Thực tế đã từ bỏ các loại số cho thời gian trung bình firefox có vấn đề mất tập trung vào hộp đầu vào. – user3594630

+0

Với giải pháp này, người dùng không thể liên tục gõ vào đầu số vì nó liên tục di chuyển dấu mũ đến cuối. – Pang

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