2015-06-03 54 views
0

我想清理這個有代表性的代碼,我決定將這些方法分離爲單獨的功能對象,然後在單個驗證函數中調用它們。代碼在第一個函數上正確運行並正確返回警告框。但是,當我修復第一個警報並重新提交表單時,第二個函數會向我發出警報以解決某些問題,然後單擊確定並立即獲得第三個函數的警報。很明顯,我需要輸入一些代碼來停止程序運行後,我點擊好的第二個功能警報,以便我可以解決這個問題,但是如何?Javascript:在函數內調用函數的問題

var checkboxes = document.getElementsByName('days'); 
var valid  = false; 

function textFieldValid(){ 
    var textFieldsReq = document.getElementsByName('textFieldReq'); 
    for(var i=0;i<9;i++){ 
     if (!textFieldsReq[i].value){ 
      alert ('You need to fill in the required* text field!'); 
      textFieldsReq[i].focus(); 
      return false; 
     } 
    } 
}; 


function checkboxesValid(){ 
    for (var i = 0;i<checkboxes.length;i++){ 
     if (checkboxes[i].checked) { 
     valid = true; 
     break; 
     } 
    } 
    if (!valid) { 
     alert('You need to select at least one day!'); 
     checkboxes[0].focus(); 
     return false; 
    } 
} 

function lodgeValid(){ 
    var lodging = document.getElementsByName('lodge'); 
    for(var i=0; i<lodging.length; i++){ 
     if(lodging[i].checked){ 
      valid=true; 
      break; 
     } 
    } 
    if (!valid) { 
     alert('You need to select at least one option!'); 
     lodging[0].focus(); 
     return false; 
    } 
} 


function validate(textFieldsReq){ 
    textFieldValid(); 
    checkboxesValid(); 
    lodgeValid();  
}; 
+1

不在一起validate方法使用所有這三種使用單一的方法中,並通過真假分別給他們打電話 – cracker

回答

2

您需要從每個測試返回true/false,然後

var checkboxes = document.getElementsByName('days'); 

function textFieldValid() { 
    var textFieldsReq = document.getElementsByName('textFieldReq'); 
    for (var i = 0; i < 9; i++) { 
     if (!textFieldsReq[i].value) { 
      alert('You need to fill in the required* text field!'); 
      textFieldsReq[i].focus(); 
      return false; 
     } 
    } 
    //if valid return true 
    return true; 
}; 


function checkboxesValid() { 
    //create local variables 
    var valid = false; 
    for (var i = 0; i < checkboxes.length; i++) { 
     if (checkboxes[i].checked) { 
      valid = true; 
      break; 
     } 
    } 
    if (!valid) { 
     alert('You need to select at least one day!'); 
     checkboxes[0].focus(); 
     return false; 
    } 
    //if valid return true 
    return valid; 
} 

function lodgeValid() { 
    var lodging = document.getElementsByName('lodge'), 
     valid = false; 
    for (var i = 0; i < lodging.length; i++) { 
     if (lodging[i].checked) { 
      valid = true; 
      break; 
     } 
    } 
    if (!valid) { 
     alert('You need to select at least one option!'); 
     lodging[0].focus(); 
     return false; 
    } 
    //if valid return true 
    return valid; 
} 


function validate(textFieldsReq) { 
    //check whether all the tests are turnig true 
    return textFieldValid() && checkboxesValid() && lodgeValid(); 
}; 
+0

我提出了修改建議,並修復了部分問題。現在,當我提交表單時,第一次警報觸發,我點擊好並修復違規問題(良好)。然後,我創建第二個問題,然後獲得第二個提醒,修復它,然後按好 - 但是然後將表單發送到我的表單郵件程序腳本,以跳過lodgeValid()函數。你可以看到代碼https://github.com/st2641/web_forms.git /ReunionRe2015/public_html/js/reg_inputs.js – user2654953

+0

@ user2654953所以你想一次得到所有3個警報 –

+0

不,我一直想在錯誤[0]中獲得單個警報。一旦它被清除,如果有另一個錯誤[0],它會轉到那一個,而不管它的功能。有三個部分:textfields /複選框/單選按鈕。這些函數按照它們出現在html表單中的順序排列。 – user2654953