Объект не определен при запуске в цикле, но не при последовательном выполнении
Я использую плагин 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');
Может ли кто-нибудь пролить свет на это странное поведение?
2 ответа
Решение
Второй набирается как number
от data()
Поскольку split() является строковым методом, он выдает ошибку.
Простое исправление:
var maskValue = "" + $(this).data('mask');
или же
var maskValue = $(this).data('mask').toString();
+ Изменить .data('mask')
с .attr('data-mask')
, По какой-то причине у меня сейчас работает нормально... Может быть, связана версия jQuery?