【问题标题】:Getting the "RangeError: Maximum call stack size exceeded" error获取“RangeError:超出最大调用堆栈大小”错误
【发布时间】:2012-08-14 23:26:43
【问题描述】:

我在 Chrome 中收到此 JavaScript 错误:

RangeError: 超出最大调用堆栈大小 [http://localhost:5545/assets/js/jquery.min.js:2]

有了这个click 事件:

$('.accept-answer-button').click(function() {
    var id = $(this).parent().parent().attr('id').replace('answer_', ''),
        b = this;
    if ($('.accepted').length > 0) $('.accepted').click();
    AP.AcceptAnswer(id, $(b));
});​

AP.AcceptAnswer() 的代码是:

AP.AcceptAnswer = function(a, o) {
    $.getJSON('/assets/ajax/accept-answer', {
        qid: qid,
        answer: a
    }, function(data) {
        if (data.success == true) {
            if (data.type == 'accepted') {
                var title = o.attr('data-unaccept-title').replace('{t}', data.time);
                o.addClass('accepted').attr('title', title);
            }
            else if (data.type == 'unaccepted') {
                var title = o.attr('data-accept-title').replace('{t}', data.time);
                o.removeClass('accepted').attr('title', title);
            }
        }
        else {
            alert(data.error);
        }
    });
}; // end AP.AcceptAnswer()​

当用户想要接受另一个答案时,我正在做$('.accepted').click(); 只是为了不接受当前接受的答案(如果有的话)。

【问题讨论】:

    标签: javascript jquery stack-overflow


    【解决方案1】:

    您确定 .accepted.accept-answer-button 类没有指向同一个元素吗?如果它们是,当您执行此操作时,您会递归地触发点击事件:

    $('.accepted').click(); 
    

    如果$('.accepted').length > 0 始终为真。

    【讨论】:

    • 只有一个元素具有 .accepted 类,但两个元素具有 .accept-answer-button 类(因为有两个答案)。这仍然会递归触发点击事件吗?
    • 你是对的。我递归地触发了点击事件。我在click 事件中添加了一个if 语句来检查按钮是否具有.accepted 类。如果是,那么我检查.accepted 并在其上触发click 事件。现在它起作用了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2015-08-22
    • 2013-07-08
    • 2018-01-24
    • 2018-02-06
    相关资源
    最近更新 更多