在循环中 运行 时未定义对象,但在顺序执行时未定义
Object not defined when running in a loop, but not when executed sequentially
我正在使用 jQuery Masked Input plugin 设置所有输入元素,其数据掩码属性定义为属性掩码值:
鉴于此 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 is not a function" 在这一行,说 'split' 未定义。
firstNonMaskPos = null, $.each(mask.split(""), function(i, c) {
然而这段代码工作正常,掩码设置没有问题。
$('#a').mask('999?999');
$('#b').mask('999');
有人能解释一下这种奇怪的行为吗?
将 .data('mask')
更改为 .attr('data-mask')
。出于某种原因现在对我来说工作正常......也许 jQuery 版本相关?
第二个被data()
输入为number
因为 split() 是一个字符串方法,所以它会抛出错误。
简单修复:
var maskValue = "" + $(this).data('mask');
或
var maskValue = $(this).data('mask').toString();
我正在使用 jQuery Masked Input plugin 设置所有输入元素,其数据掩码属性定义为属性掩码值:
鉴于此 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 is not a function" 在这一行,说 'split' 未定义。
firstNonMaskPos = null, $.each(mask.split(""), function(i, c) {
然而这段代码工作正常,掩码设置没有问题。
$('#a').mask('999?999');
$('#b').mask('999');
有人能解释一下这种奇怪的行为吗?
将 .data('mask')
更改为 .attr('data-mask')
。出于某种原因现在对我来说工作正常......也许 jQuery 版本相关?
第二个被data()
number
因为 split() 是一个字符串方法,所以它会抛出错误。
简单修复:
var maskValue = "" + $(this).data('mask');
或
var maskValue = $(this).data('mask').toString();