當一個函數被這樣使用:
$(...).each(function() {
...
});
它被稱爲anonymous function或lambda功能。
我從來沒有聽說過「命名函數」一詞,但我想你可以這樣稱呼它,當你將函數分配給一個變量。
jQuery.each
返回幾乎所有的jQuery方法的第一個參數,這相當於$("#firstname, #surname")
。這是非常重要的理解,因爲它是jQuery的關鍵機制之一,並且可以讓你做一些很酷的事情,如方法鏈接,例如$("#firstname, #surname").each(do something).each(do even more)
。這意味着,您不能在each
方法中返回錯誤並將其傳遞給構造外的變量。
你可以增加一個全局變量:
var errors = 0
$("#firstname, #surname").map(function() {
if ($(this).val() == '') {
errors++
}
});
console.log("you have" + errors + "errors");
注意字符串連接符+
,不.
。
另一個想法可能是使用的jQuery.map
方法,它的確使您能夠返回一個值:
var errors = $("#firstname, #surname").map(function() {
if ($(this).val() == '') {
return 1
}
return 0
});
但這隻會留給你的1
數組和0
元素是或多或少的與你已經開始的一樣。你需要添加另一個循環來將元素放在一起。
最後讓我們到jQuery.filter
方法,它應該只是你需要什麼:
var errors = $("#firstname, #surname").filter(function() {
return $(this).val() == "";
}).length;
console.log("you have " + errors + " errors");
過濾器將只返回那些傳遞函數返回一個truthy值的元素,所以在這種情況下,所有元素有一個空值。你不能只算的元素,但立即凸顯空表單元素:
var errors = $("#firstname, #surname").filter(function() {
return $(this).val() == "";
}).css("background-color", "red").length;
console.log("you have " + errors + " errors");
你的意思是:'().each(x)'? – tymeJV 2015-02-10 13:51:52
在第一個代碼段中,'x'是引用**匿名函數**的**變量**。在第二部分中,您只需傳遞一個匿名函數以供'each()'方法使用。 – haim770 2015-02-10 13:53:48