-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()

4

5 回答 5

14

在 jQuery 中.eachreturn false;就像break;在“正常”for循环中使用一样。

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

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


return false就是这样做的。退货false。调用函数对返回值的作用是另一回事。它的“意图”完全取决于return. return false只是为了返回false

如果您要从单击处理程序(而不是从.each)返回,那么它将停止默认的单击操作,但是在您的代码中,您在另一个函数中。

于 2013-05-01T18:27:02.257 回答
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()是调用者,因此它可以决定响应返回的值(如果有的话)做什么。

于 2013-05-01T18:35:38.660 回答
4

它用于取消默认操作和事件传播

问题是你有 2function秒,并期望return false影响“另一个”。return语句适用于最接近 function的 ,在本例中是传递给.each().

要使用return false.click()您必须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;
});
于 2013-05-01T18:41:25.727 回答
0

return关键字确实打破了循环。

取消 JavaScript 中的默认操作通常使用 来完成event.preventDefault();,但我不确定在这种情况下您要取消哪个默认操作。

于 2013-05-01T18:28:38.153 回答
0

当回调.each返回 false 时,jQuery 使用break打破它的内部循环。看这里:

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

这就是为什么返回 false 会阻止$.each循环继续进行。

break由于范围的原因,使用不会产生任何影响,这就是return false添加功能的原因。

于 2013-05-01T18:39:02.013 回答