[英]boolean variable is acting weird
首先是代碼:
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());
}
在表單提交上調用此函數。 目的是查看“文本”類型的所有表單字段是否都沒有值(空輸入框)。
我認為應該的時候沒有收到警報。 布爾變量在聲明時會初始化,因此其中有一個值。 如果所有的if語句都能正常工作,我已經反復檢查過。 我在瀏覽器中遇到的唯一錯誤是“類型為null或不是對象”,該錯誤將表單字段類型與“文本”進行比較。
我為警報嘗試了不同的語法,但均未成功:noParameters.toString(),將noParameters.valueOf()分配給變量,然后警告為“ true”和“ false”,而不是0和1。為什么我的警報沒有節目?
您有一個無限循環,因為條件1 < formFields.length
始終為true。 但是, i
每次都會增加,直到formFields[i]
計算為null
並得到異常,因為您無法訪問非對象的type
屬性。
給你的問題: new Boolean(0);
為值false
創建一個絕對不必要的Object包裝器。 不要使用它。 在循環內部,最終將0
分配給變量。 JavaScript是弱類型的,因此在語法上是有效的,但仍然很奇怪。
然后,在警報中使用.valueOf()
方法。 對於數字0
這將起作用,因為它被隱式轉換為Number
實例,但也不常見。 如果僅使用布爾值,則不需要它。
您在循環中犯了一個錯誤:您說“ while” 1
你可能是說
for(i=0;i<formFields.length;i++){
其他人已經指出,您在1<formFields.length
中有一個數字為1
的錯字,其中應該像i<formFields.length
那樣包含變量i
。 但是,如果您的目的是:
“以查看是否所有類型為'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
語句: &&
運算符使用短路評估,因此只有在左側條件為true時,它才會測試右側條件。
或者,由於您的問題被標記為“ 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,"") != "")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.