2015-02-26 19 views
5

Tôi đang sử dụng jQuery Masked Input plugin để đặt tất cả các yếu tố đầu vào với một thuộc tính dữ liệu mặt nạ được xác định với giá trị mặt nạ thuộc tính:Đối tượng không được xác định khi chạy trong một vòng lặp, nhưng không phải khi thực hiện tuần tự

Với html này:

<input type='text' id="a" data-mask='999?999' /> 
<input type='text' id="b" data-mask='999' /> 

Và kịch bản này:

$("input[data-mask]").each(function() { 

    var maskValue = $(this).data('mask'); 

    console.log($(this).attr('id') + ": " + maskValue); 

    //undefined error here on second iteration "b: 999" 
    //no issues if you remove the data-mask from one of the input elements 
    return $(this).mask(maskValue); 

}); 

Các lặp thứ hai một lỗi được ném: "của router lỗi Loại: undefined không phải là một chức năng" trên dòng này, nói rằng 'chia' là không xác định.

firstNonMaskPos = null, $.each(mask.split(""), function(i, c) { 

Mã này hoạt động tốt, mặt nạ được đặt không có vấn đề gì.

$('#a').mask('999?999'); 
$('#b').mask('999'); 

Mọi người có thể chiếu sáng bất kỳ hành vi kỳ quặc này không?

Demo jsFiddle here

Trả lời

8

thứ hai đang được đánh máy như number bởi data()

Kể từ khi chia tay() là một phương pháp chuỗi nó được ném lỗi.

Simple sửa chữa:

var maskValue = "" + $(this).data('mask'); 

hoặc

var maskValue = $(this).data('mask').toString(); 
+0

Ah, cảm ơn bạn! Điều đó sẽ giải thích nó một cách hoàn hảo. – asawyer

1

Thay đổi .data('mask') với .attr('data-mask'). Làm việc tốt cho tôi vì một lý do nào đó ... Có lẽ phiên bản jQuery có liên quan?

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