首先是代码:
function searchItems(){
var noParameters = new Boolean(0);
var formFields = $('form')[0].elements;
for(i=0;1<formFields.length;i++){
if(formFields[i].type == 'text'){
if(!(formFields[i].value)){
noParameters = 0;
}
}
}
alert(noParameters.valueOf());
}
在表单提交上调用此函数。它的目的是查看所有类型的表单字段是否&#39; text&#39;没有价值(空输入框)。
我想我应该得到警报。布尔变量在声明时初始化,因此其中有一个值。 if语句都可以正常工作,我已经反复检查过。我在浏览器中唯一的错误是&#34;类型为null或不是对象&#34;这是将表单字段类型与&#39; text&#39;。
进行比较的行我已经为警报尝试了不同的语法但没有成功:noParameters.toString(),将noParameters.valueOf()分配给变量,然后警告,&#39; true&#39;并且&#39; false&#39;而不是0和1.为什么我的警报不显示?
答案 0 :(得分:4)
您有一个无限循环,因为条件1 < formFields.length
始终为真。但是,i
每次都会增加,直到formFields[i]
计算为null
并且您得到异常,因为您无法访问非对象的type
属性。 / p>
对于您的问题:new Boolean(0);
为值false
创建一个绝对不必要的Object包装器。不要使用它。在循环内部,您最终将0
分配给变量。 JavaScript是弱类型的,因此这在语法上是有效的,但仍然很奇怪。
然后,在警报中使用.valueOf()
方法。对于数字0
,这将起作用,因为它隐式转换为Number
实例,但也不常见。如果您只使用了布尔值,则不需要它。
答案 1 :(得分:2)
你在循环中犯了一个错误:你说'while'1
答案 2 :(得分:2)
你可能意味着
for(i=0;i<formFields.length;i++){
答案 3 :(得分:1)
其他人已经指出,1
中的1<formFields.length
数字输入错误,您应该在i
中拥有变量i<formFields.length
。但如果你的目的是:
“查看”text“类型的所有表单字段是否都没有值(空输入框)。”
然后我会像你这样整理你的功能:
function searchItems(){
var noParameters = true,
formFields = $('form')[0].elements;
for(i=0;i<formFields.length;i++){
if(formFields[i].type == 'text' && formFields[i].value != ""){
noParameters = false;
break;
}
}
alert(noParameters);
}
也就是说,只要找到任何非空白文本字段,就将noParameters
设置为false并跳出循环。正如我在上面的评论中提到的,只使用原始值true
和false
,不要使用new Boolean()
。请注意,您不需要嵌套的if
语句:&&
运算符使用短路评估,因此只有在左侧条件为真时才会测试右侧条件。
或者,由于您的问题标记为“jquery”,因此以下内容更短(但在运行时效率较低):
function searchItems() {
var noParameters = $('form input[type="text"]').filter(function(){
return this.value != "";
}).length === 0;
alert(noParameters);
}
也就是说,如果具有非空值的文本类型的输入集的长度为0,那么您没有设置参数...
无论哪种方式,在您测试.value
时,您可能希望修剪任何空格,以便用户不能通过输入空格来欺骗您的代码:
if(formFields[i].type == 'text' && formFields[i].value.replace(/\s/g,"") != "")