EDIT2:耶,發現問題,居然有在Ajax調用一個錯誤,因爲我的愚蠢,我不知道,這兩種方法 - 成功和錯誤可以跑(我想這是不是一個或另一個),所以formComplete每次都被設置爲false,因爲出現錯誤。爲什麼這個變量在函數中傳遞時會發生變化?
欣賞你給&尖關於不使用全局變量名作爲函數參數的時間。
編輯:這裏是()的console.log(的檢查formComplete整個過程),其中formComplete
設置代碼:去爲什麼這個變量(formComplete):
validate: function(field) {
if(!field.val()) {
formComplete = false;
// formComplete is false here
console.log(formComplete);
}
else {
if(field.attr('name') === 'queryEmail') {
// Validate the email
if(DMOFFAT.helper.validateEmail(field.val()) === true){
// formComplete is either true or false here, depending on the last validation carried out
console.log(formComplete);
formComplete = true;
// formComplete is true here
console.log(formComplete);
}
else {
formComplete = false;
// formComplete is false here
console.log(formComplete);
}
}
else {
formComplete = true;
// formComplete is true here
console.log(formComplete);
}
}
},
問題從真到假?
我已經寫了一些基本的表單驗證聯繫人的形式,這裏是如何我已經做到了:
定義的字段,如下所示:
var queryTypeField = $('#queryType'),
queryMessageField = $('#queryMessage'),
queryEmailField = $('#queryEmail'),
queryNameField = $('#queryName'),
submitButton = $('#submit');
添加一些事件處理程序對這些像這樣(FWIW,DMOFFAT變量只是保持該代碼例如聯繫形式=接觸形式的不同模塊的JavaScript等的對象):
queryMessageField.on('blur', function() {
DMOFFAT.contactForm.validate(queryMessageField);
});
queryNameField.on('blur', function() {
DMOFFAT.contactForm.validate(queryNameField);
});
queryEmailField.on('blur', function() {
DMOFFAT.contactForm.validate(queryEmailField);
});
submitButton.on('click', function(evt) {
evt.preventDefault();
console.log('Click');
console.log(formComplete);
DMOFFAT.contactForm.send(formComplete);
});
的驗證函數簡單地設置'formComplete'
爲true或false,取決於字段是否有效。
當我的領域都填寫正確,formComplete = true
。
正如你可以從上面我的代碼的最後一行看到,我通過formComplete
(這是真的)到我的發送功能。我的發送功能只是檢查的formComplete
值,然後將數據發送關閉PHP腳本,或打印錯誤,下面的代碼:
send: function(formComplete) {
// This is true when the form is filled in correctly
console.log('In send formComplete is...' + formComplete);
if(formComplete === true) {
// Extract form values
formData['queryMessage'] = queryMessage.value;
formData['queryType'] = queryType.value;
formData['queryName'] = queryName.value;
formData['queryEmail'] = queryEmail.value;
$.ajax({
type: 'POST',
async: true,
url: '....',
dataType: 'json',
data: formData,
success: function(data, status, xhr) {
DMOFFAT.contactForm.writeMessage(formComplete);
},
error: function(xhr, status, err) {
DMOFFAT.contactForm.writeMessage(formComplete);
}
});
}
else {
this.writeMessage(formComplete);
}
現在,我知道formComplete
是真實的,當表單填寫正確的,因爲我的PHP腳本創建一個.txt文件的數據,如果它是假的,這個文件不會被創建。
這意味着我們發送的formComplete
值關閉到的WriteMessage,它只是寫了一些HTML頁面顯示提交是否成功與否,下面的代碼:
formComplete
本身定義像這樣:
var formComplete;
當我檢查formComplete的WriteMessage上的第一行,它現在假的,我無法找出原因,但...甚至當我明確設置formComplete
爲true它的第106頁寫入MessageMessage,它仍然是錯誤的。
TLDR:告訴我,在那裏我太傻了,請:)
PS:我知道我可以使用預建的聯繫表單驗證插件,但想嘗試建立一些簡單的自己。
您發送'formComplete'到'DMOFFAT.contactForm.writeMessage();'。它是否是您定義'writeMessage'的同類對象? –
你正在做一些有趣的事情,有一個全局變量與函數參數具有相同的名稱......沒有錯誤或無效,但在該函數中,它是將被引用的本地參數,而不是全局變量。 – Pointy
formComplete是全局定義的嗎? – chucktator