2013-05-01 74 views
-4
$("button").click(function() { 
    $("div").each(function (index, domEle) { 
     // domEle == this 
     $(domEle).css("backgroundColor", "yellow"); 
     if($(this).is("#stop")) { 
      $("span").text("Stopped at div index #" + index); 
      return false; 
     } 
    }); 
}); 

什麼return false要做.each()方法嗎?在.each()方法中返回false是什麼原因?它如何阻止循環?

+0

可能重複[如何突圍jQuery的每次循環(http://stackoverflow.com/questions/1784780/how-to-break-out jquerys-each-loop) – epascarello 2013-05-01 18:27:48

+3

你期望'返回false'來實際做什麼?如果從函數返回,循環將停止,不是嗎? – 2013-05-01 18:27:59

+1

@RobertHarvey它的意思是取消默認動作和事件傳播 – 2013-05-01 18:29:08

回答

13

在jQuery的.each,return false;就像在「正常」for循環中使用break;

另一方面,return true;就像continue;

文檔:http://api.jquery.com/each/


return false做到了這一點。返回false。調用函數對返回值的作用是不同的。它的「意思」是什麼取決於return的功能。 return false只是爲了返回false

如果您要從點擊處理程序(而不是從.each)返回,那麼它將停止默認的點擊操作,但是在您的代碼中的這一點,您在另一個函數內。

0

return關鍵字的確會突破循環。

取消JavaScript中的默認操作通常是使用event.preventDefault();完成的,但我不確定在此上下文中要取消哪個默認操作。

+2

返回false還取消事件傳播 – 2013-05-01 18:30:34

+0

如果涉及到某個事件 – 2013-05-01 18:46:39

5

「它怎麼能阻止循環?

像這樣:

// array  callback 
each([1,2,3,4,5], function(i, val) { 
    if (val === 3) 
     return false; 
}) 

function each(array, callback) { 
    // iterate the collection 
    for (var i = 0; i < array.length; i++) { 

     // Invoke the callback, and store its return value 
     var result = callback(i, array[i]); 

     // If it returned `false`, break the loop 
     if (result === false) { 
      break; 
     } 
    } 
} 

從什麼函數的返回值「的意思是」做最終取決於該函數的調用者。

在上面的例子中,你通過回調到each()功能,並且each()函數調用它。由於each()中的代碼是調用者,因此它將決定如何迴應返回的值(如果有的話)

0

當回調到.each返回false時,jQuery使用break來打破它的內部循環。在這裏看到:

https://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L616

這是爲什麼返回false從前進停止$.each循環。

使用break由於範圍而不起作用,這就是爲什麼添加了return false功能的原因。

+1

由於不能在函數中使用「break」語句(循環結構外),所以添加了「返回false」功能。 – 2013-05-01 18:42:43

+0

我只是想澄清:-) – 2013-05-01 18:43:49

4

是指取消默認的行爲,事件傳播

的問題是你有2個function S和期待return false影響「其他」之一。 return聲明適用於最接近的function,在這種情況下是傳遞給.each()的那一個。

要爲.click()使用return false,你必須是function獨中使用它:

$("button").click(function() { 
    // either here... 

    $("div").each(function (index, domEle) { 
     // ... 
    }); 

    // ...or here 
}); 

因爲它似乎取決於.each(),你要創建一個變量,可以是根據需要修改,然後返回在最後:

$("button").click(function() { 
    var clickResult; // `undefined` = "no change" 

    $("div").each(function (index, domEle) { 
     // domEle == this 
     $(domEle).css("backgroundColor", "yellow"); 
     if($(this).is("#stop")) { 
      $("span").text("Stopped at div index #" + index); 
      clickResult = false; 
      return false; // remove if you want the `.each()` to continue regardless 
     } 
    }); 

    return clickResult; 
}); 
相關問題