的onsubmit =「」的表格元素上定義了一個事件的功能。返回值(如果已定義)將傳回給瀏覽器。虛假值(false,null,undefined等)將阻止瀏覽器繼續進行表單提交。
它類似於其他任何功能
function isValid(form) {
if (someBadCondition) {
// record some error somewhere
return false;
}
if (someHorribleCondition || someEquallyBadCondition) {
// record some other error
return false;
}
return true;
}
function canSubmitForm(form) {
isValid(form);
}
最後一行永遠傳遞返回值回來。因此,
console.log(isValid(someForm)); // true
console.log(canSubmitForm(someForm)); // undefined
將onsubmit =「submitForm()」看作您的canSubmitForm。這實際上就是這樣。無論您在onsubmit =「」中定義什麼,都會被視爲一個函數來回答「我們可以提交這個問題嗎?」這個問題。
你會解決上面的例子一樣:
function canSubmitForm(form) {
return isValid(form);
}
通知return語句將通過現在對canSubmitForm的調用者傳遞的isValid的結果。
因此,
onsubmit="submitForm();"
和
onsubmit="return submitForm();"
差異性之探源的是,在前者,submitForm的返回值被忽略。在後面的例子中,如果submitForm返回一個值,它將被傳遞給onsubmit(它是瀏覽器)的調用者。
您最有可能提交表單兩次,因爲您的代碼表示「提交表單時提交表單」。
如果submitForm JavaScript函數需要擁有提交過程(對於像ajax w/graceful degradation這樣的事情是很常見的),那麼您需要在事件處理函數中添加一個返回false。
onsubmit="submitForm(); return false"
或改變submitForm返回false,然後的onsubmit它傳遞
onsubmit="return submitForm();"
function submitForm() {
// do some submission stuff
return false;
}
我推薦前者,你把一個明確的虛假事件處理程序。原因是事件處理程序是需要false的原因。提交併不是虛假的。你沒有失敗或拒絕。 submitForm應該關注提交的東西,並讓你的事件處理程序處理瀏覽器事件處理的東西。再加上它對代碼有一點防錯。
你的例子沒有任何意義,你爲什麼要調用一個函數onsubmit,並在該函數重新提交相同的形式?幸運的是瀏覽器退出或者你會有一個無限循環 – epascarello 2013-05-10 14:00:20
我喜歡你剛剛改變了問題,所以現在標題不符合問題。 – epascarello 2013-05-10 14:01:21
@epascarello所以你可以更好地理解它。 – code511788465541441 2013-05-10 14:02:47