Объект не определен при запуске в цикле, но не при последовательном выполнении

Я использую плагин jQuery Masked Input для установки всех элементов ввода с атрибутом data-mask, определенным для значения атрибута mask:

Учитывая этот HTML:

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

И этот скрипт:

$("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);

});

Во второй итерации выдается ошибка: "Uncaught TypeError: undefined не является функцией" в этой строке, говоря, что split не определен.

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

Этот код, однако, работает просто отлично, маски устанавливаются без проблем.

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

Может ли кто-нибудь пролить свет на это странное поведение?

Демо jsFiddle здесь

2 ответа

Решение

Второй набирается как number от data()

Поскольку split() является строковым методом, он выдает ошибку.

Простое исправление:

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

или же

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

+ Изменить .data('mask') с .attr('data-mask'), По какой-то причине у меня сейчас работает нормально... Может быть, связана версия jQuery?

Другие вопросы по тегам