在循环中运行时未定义对象,但在顺序执行时则不定义

asa*_*yer 5 javascript jquery maskedinput

我正在使用jQuery Masked Input插件来设置所有输入元素,并将数据掩码属性定义为属性掩码值:

给出这个HTML:

<input type='text' id="a" data-mask='999?999' />
<input type='text' id="b" data-mask='999' />
Run Code Online (Sandbox Code Playgroud)

这个脚本:

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

});
Run Code Online (Sandbox Code Playgroud)

第二次迭代抛出一个错误:"未捕获的TypeError:undefined不是函数"在这一行,说'split'没有定义.

firstNonMaskPos = null, $.each(mask.split(""), function(i, c) {
Run Code Online (Sandbox Code Playgroud)

但是这个代码工作正常,掩码设置没有问题.

$('#a').mask('999?999');
$('#b').mask('999');
Run Code Online (Sandbox Code Playgroud)

任何人都可以对这种奇怪的行为发光吗?

演示jsFiddle在这里

cha*_*tfl 8

第二个被分类为number通过data()

由于split()是一个字符串方法,因此抛出错误.

简单修复:

var maskValue = "" + $(this).data('mask');
Run Code Online (Sandbox Code Playgroud)

要么

 var maskValue =  $(this).data('mask').toString();
Run Code Online (Sandbox Code Playgroud)