jQuery for ... in toUpperCase不是一个函数

时间:2013-04-25 07:26:25

标签: jquery

典型输入如下......

<input type="checkbox" class="actEmail" data-value="1"/>Department one</li>

在我的功能......

var chksDept = $('input[type=checkbox].actEmail:checked');
var depts = Array();

chksDept.each(function() { 
    depts.push($(this).data('value').toUpperCase());  
});

为什么我收到错误:

  

$(...).data(...).toUpperCase()不是函数吗?

我需要的是以大写字母获取所有数据值。

2 个答案:

答案 0 :(得分:5)

this $(this).data('value')返回的值属于number类型。即:

console.log(typeof $(this).data('value'));

您首先需要检查它是否为number,然后先将其转换为string。像这样:

var chksDept = $('input[type=checkbox].actEmail:checked');
var depts = Array();

chksDept.each(function() { 
    var data = $(this).data('value');
    if (typeof data === 'number') {
         data = ""+data;   
    }
    depts.push(data.toUpperCase());  
});

console.log(depts);

答案 1 :(得分:3)

这是因为data属性的data-value='1'方法返回一个数字而Number对象没有toUpperCase方法,假设您的data-*属性包含数字和非{数值,并且您希望将非数字值转换为大写,您可以使用attr方法返回一个字符串。

$(this).attr('data-value').toUpperCase();

http://jsfiddle.net/B8FRE/

data-*属性映射到元素的dataset属性并且元素的属性和属性之间存在差异时,就会发生这种情况。