2009-11-09 24 views
5

Tôi có mã này trong jquery để ngăn chặn các ký tự số được đầu vào cho các trường văn bảnValidate số lĩnh vực văn bản trong jquery

$("#NumericField").numeric(); 

Bây giờ, trên các lĩnh vực văn bản i cant đầu vào không phải số ký tự. Được thôi. Vấn đề ở đây là nếu người dùng sẽ dán vào trường văn bản với các ký tự không phải số.

Có cách nào/phương pháp để tắt tính năng dán nếu giá trị không phải là số không? Hoặc có cách tiếp cận nào khác để xử lý tình huống này mà bạn có thể chia sẻ không?

+0

Bạn nên sử dụng lớp học thay vì ID để xác định tất cả các trường số. Bây giờ bạn chỉ có thể có một trường số trên một trang. –

+0

Ý tưởng hay. Tôi sẽ thay đổi mã của tôi. –

Trả lời

5

bạn có thể sử dụng callback mà kiểm tra trên rời khỏi hiện trường nếu giá trị là hợp lệ nếu giá trị không hợp lệ thì rõ ràng nó và thông điệp của chương trình báo lỗi:

var decimal_char = ','; 
function isvalidnumber(){ 
    var val=$(this).val(); 
    //This regex is from the jquery.numeric plugin itself 
    var re=new RegExp("^\\d+$|\\d*" + decimal_char + "\\d+"); 
    if(!re.exec(val)){ 
     alert("Invalid number"); 
     $(this).val(""); 
    }  
} 
$(document).ready(function(){ 
    $("#txtN").numeric(decimal_char,isvalidnumber); 
}); 
+0

Có thể thay vì thông báo lỗi, đầu vào chỉ có thể được lọc để xóa các ký tự không hợp lệ? Nó có thể đẹp hơn cho người sử dụng nếu anh ta/cô ấy dán một số có một không gian cuối cùng, ví dụ. – Kaivosukeltaja

+0

Tôi đã sửa đổi nó. đầu tiên không hoạt động và không tính đến số thập phân char – TheVillageIdiot

+0

Tôi sẽ thử cái này ... –

0

Tôi thấy kịch bản này trên http://www.kunalbabre.com/jQueryLibrary/index.php:

$('input[numeric]').keyup(function() {  
    var d = $(this).attr('numeric'); 

    var value = $(this).val(); 
    var orignalValue = value; 
    value = value.replace(/[0-9]*/g, ""); 

    var msg = "Only Integer Values allowed."; 

    if (d == 'decimal') { 
     value = value.replace(/\./, ""); 
     msg = "Only Numeric Values allowed."; 
    } 

    if (value != '') { 
     orignalValue = orignalValue.replace(/([^0-9].*)/g, "") 
     $(this).val(orignalValue); 
     //alert(msg); 
     $(this).after('<span style="margin-left:5px;color:red;position:absolute;">' + msg + '</span>'); 
    } else { 
     $(this).next('span').remove(); 
    } 
}); 

Nó hoạt động tốt trừ khi số có ',' trên nó như '100.000.00'. Nó sẽ chỉ hiển thị '100'. Các ',' và phần còn lại đã biến mất.

Chỉnh sửa: Tôi nghĩ rằng điều này là trên reg cũ nhưng im không biết gì về nó. ? :(

Bất cứ ý tưởng Help

1

đâu nó nói:

value = value.replace(/\./, ""); 

Bạn nên đặt:

value = value.replace(/\.\,/, ""); 

Tôi đoán ;-)

Tôi thực sự đã kết thúc làm điều này:

$(‘.InputClass’).keyup(function(){ 
    if ($(this).val() != "") 
    $(this).val($(this).val().replace(/[^0-9\.]/g, "")); 
}); 

Vì vậy, không có cảnh báo an toàn cũng như bất kỳ điều gì; chỉ khi bạn gõ bất cứ điều gì khác hơn là một số hoặc một dấu chấm sau một số, sẽ bị xóa. Đơn giản nhưng rất nhạy cảm.

Chúc mừng. Hy vọng giúp ai đó.

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