Javascript 无法调用方法';toLowerCase';未定义的
我有这段代码,它从文本框中读取值,我认为在尝试parseInt()之前检查“”是安全的,但显然不是 我得到一个错误: 未捕获的TypeError:无法调用未定义的方法“toLowerCase” 使用此代码:Javascript 无法调用方法';toLowerCase';未定义的,javascript,jquery,Javascript,Jquery,我有这段代码,它从文本框中读取值,我认为在尝试parseInt()之前检查“”是安全的,但显然不是 我得到一个错误: 未捕获的TypeError:无法调用未定义的方法“toLowerCase” 使用此代码: var total = 0; $.each('.reg-input', function () { if ($(this).val() == '') { }
var total = 0;
$.each('.reg-input', function () {
if ($(this).val() == '') {
}
else {
total += parseInt($(this).val()); //this line throwing error
}
});
if (total == 0) {
$('.RegisterContainer').hide();
}
'.reg input'
是一个字符串,在这种情况下,这个
也将是一个字符串,而不是dom元素。请尝试以下方法:
$('.reg-input').each(function(){...
if($(this).val()==“”)
检查值是否为未定义的字符串“”。您可以像这样使用typeof运算符
if(typeof$(this).val()=='undefined')
出现奇怪错误的原因是调用$。每个都使用字符串而不是集合
字符串是一个对象,因此它仍然是一个集合,但集合中的项是string类的属性和方法(而toLowerCase
就是其中之一)
要循环使用选择器查找的元素,请使用,而不是:
现在,循环中的this
将是一个元素,而不是string类的成员,因此您可以使用$(this).val()
来获取值。我遇到了完全相同的问题,我通过将$(this).val()
分配给一个变量,然后将变量解析为整数来解决这个问题。因此,正确的解决方法是:
var total = 0;
$.each('.reg-input', function () {
if ($(this).val() == '') {
}
else {
$this_val = $(this).val();
total += parseInt($this_val); //this line throwing error
}
});
if (total == 0) {
$('.RegisterContainer').hide();
}
尝试修复括号total+=parseInt($(this.val())
不应该是total+=parseInt(this.val())代码>?这是粘贴它的问题,我有正确的括号在代码没有人阅读错误?您实际在哪里使用“toLowerCase”
?!?无论您在哪里调用.toLowerCase()
被引用的对象都是未定义的@zzzzBov,它位于$()
方法或.val()
中,具体取决于失败的位置。他在遍历字符串,而不是元素集合。这才是真正的问题所在。不太清楚为什么会被否决。。。检查字符串“”和未定义的内容有一个主要区别。。。OP你真的应该试一试…这与被问的问题无关。是的,他进入了else{},因为他的if语句失败了。。。如果他的If语句捕捉到$(this)未定义,它将不会转到else,并将以OP正在查找的方式进行验证。。。他不会犯错误的。。。编辑:如果你想要一个更一般的答案。。。不val()对undefined进行求值是不安全的……但问题在于错误,而不是问题标题的标签错误。@JLeslie-如果使用jQuery的.val()对val()进行了未定义,则该行将变成空字符串,这就是为什么该行在其中的原因,您的行也可以工作谢谢,很好的捕获,我留下了一点拼写错误(遗漏了“),然后试图告诉人们这不是我想要的problem@ScottSelby凯文是第一个来的。确保按最年长的人点菜,你会首先看到凯文的帖子。
var total = 0;
$.each('.reg-input', function () {
if ($(this).val() == '') {
}
else {
$this_val = $(this).val();
total += parseInt($this_val); //this line throwing error
}
});
if (total == 0) {
$('.RegisterContainer').hide();
}