【问题标题】:jquery Uncaught SyntaxError: Illegal break statement [duplicate]jquery Uncaught SyntaxError:非法中断语句[重复]
【发布时间】:2015-10-18 20:13:47
【问题描述】:

Uncaught SyntaxError: Illegal break statement

这是我尝试打破循环时收到的警告。当条件满足时我想做的循环中断。在示例代码中,我有两个活动类,当遇到第一个活动类时我想完全跳出循环。

<ul>
    <li id="foo1" class="bar">1</li>
    <li id="foo2" class="bar">2</li>
    <li id="foo3" class="bar">3</li>
    <li id="foo4" class="bar">4</li>
    <li id="foo5" class="active">5</li>
    <li id="foo6" class="bar">6</li>
    <li id="foo7" class="bar">7</li>
    <li id="foo8" class="active">8</li>
</ul>

js

$(function(){
    function setup(){
        var x,y,z;
         $("ul li").each(function(){
             //console.log($(this)[0].className);
             if($(this)[0].className === 'active'){
                 x = $(this)[0].className;
                 y = $(this)[0].tagName;
                 z = $(this)[0].id;
                 break;
             } 
         });
        var return_values = {
            class : x,
            tag : y,
            id : z
        }
        return(return_values);
    }
    var data = setup();
    console.log(data.class,data.tag,data.id);
});

JSFIDDLEhere

【问题讨论】:

    标签: javascript jquery loops break


    【解决方案1】:

    要退出each() 中的匿名函数,请使用return false。另请注意,使用 DOMElement 创建 jQuery 对象然后访问 DOMElement 的属性是完全多余的。试试这个:

    $("ul li").each(function() {
        if (this.className === 'active') {
            x = this.className;
            y = this.tagName;
            z = this.id;
            return false;
        } 
    });
    

    还要注意,您的代码实际上只选择了第一个 .active 元素,因此循环是多余的。您可以直接选择该元素并从中检索必要的属性。试试这个:

    const $li = $('ul li.active:first');
    let x = $li.prop('className');
    let y = $li[0].tagName;
    let z - $li.prop('id');
    

    【讨论】:

    • 好的,谢谢。我以为 return 会退出整个函数,可惜我没有尝试。
    • 没问题,很高兴为您提供帮助。作为参考,return 仅适用于包含它的函数的范围。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多