2016-08-13 79 views
0

我在JavaScript中創建了一個validate()函數,當我調用該方法時,它返回undefined ....我的代碼中的所有東西看起來都對我來說,它爲什麼這樣做?爲什麼我的價值在jquery中返回?

function validate() { 
    var __self = this; 
    __self.is_valid = true; 

    $(document).on("click", "#login,#create_account", function() { 
     var email = $("#email").val(), 
      password = $("#password").val(); 

     if (email == "") { 
      $("#email-err-msg").removeClass("hidden").html("Enter an email address"); 
      __self.is_valid = false; 
     } else { 
      $("#email-err-msg").addClass("hidden") 
     } 

     return __self.is_valid; 
    }); 
} 

(function logUser() { 
    $(document).on("submit", "form", function() { 
     var action = $(".action").attr("data-account-action"); 

     console.log(validate()); 

     if (!validate()) { 
      return false; 
     } 
    }); 
})(); 
+0

尋求幫助時,如果以簡潔易讀的方式呈現您的代碼,這將非常有用。上面的格式非常不一致,很多沒有意義的空白行導致塊在不需要時滾動,沒有明顯原因的奇數長空格系列(如'var action ='之後)等等(我已經在這種情況下爲你修復它。) –

+0

代碼沒有多大意義。你爲什麼在一個函數中掛接一個事件處理函數,以便在響應某個事件時被調用? –

+0

@ T.J.Crowder你是對的。我甚至沒有意識到我做錯了。我刪除了事件處理程序,並將其定義爲常規函數,並在表單提交事件處理程序中調用它。感謝您指出這一點 – json1

回答

0

validate函數永遠不會返回任何東西,所以調用它的結果總是undefined。您有一個回調到您在其中定義的事件處理程序,並且中有return語句,但validate中沒有。

不清楚爲什麼每次用戶嘗試提交表單時都要連接一個事件處理程序。我建議不要這樣做。也許是這樣的:

function validate() { 
    var is_valid = true; 

    var email = $("#email").val(), 
     password = $("#password").val(); 

    if (email == "") { 
     $("#email-err-msg").removeClass("hidden").html("Enter an email address"); 
     is_valid = false; 
    } else { 
     $("#email-err-msg").addClass("hidden") 
    } 

    return is_valid; 
} 

(function logUser() { 
    $(document).on("submit", "form", function() { 
     var action = $(".action").attr("data-account-action"); 

     return validate(); 
    }); 
})(); 

我已經刪除了click事件處理程序,因爲我看不出有任何理由吧,去掉了全局變量__is_valid,並返回直接調用validate的結果從submit處理程序(因爲返回true是無害的)。


爲什麼會是一個全局變量?因爲你打電話的驗證是這樣的:validate(),這意味着在通話中,this指的是全局對象(除非你使用嚴格模式,在這種情況下它將是undefined;但我知道你不是因爲你說的它返回undefined而不是拋出錯誤)。向全局對象添加屬性會創建全局變量。

+0

你說得對。我甚至沒有意識到我做錯了。我刪除了事件處理程序,並將其定義爲常規函數,並在表單提交事件處理程序中調用它。感謝您指出了這一點 – json1

相關問題