Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery超出了最大调用堆栈大小_Javascript_Jquery - Fatal编程技术网

Javascript jQuery超出了最大调用堆栈大小

Javascript jQuery超出了最大调用堆栈大小,javascript,jquery,Javascript,Jquery,我在jQuery中遇到了一个错误,我不明白为什么 我的错误:未捕获范围错误:超过最大调用堆栈大小 我的代码: getSelected函数返回一个对象,editeTextOfSelectedCase更新getSelected对象 var removeCaseToEditableMode = function removeCaseToEditableMode($case){ getSelectedCase().isEditable = false;

我在jQuery中遇到了一个错误,我不明白为什么

我的错误:未捕获范围错误:超过最大调用堆栈大小

我的代码:

getSelected函数返回一个对象,editeTextOfSelectedCase更新getSelected对象

        var removeCaseToEditableMode = function removeCaseToEditableMode($case){
            getSelectedCase().isEditable = false;
            $case.attr('contenteditable', false);
            $case.attr('id', '');
            editeTextOfSelectedCase($case);
            var $rightCase = getSelectedCase().$rightCase; // error with these two last lines ...
            selectCase($rightCase);
        };
编辑2:

        var getSelectedCase = function getSelectedCase(){
            var $selectedCaseFound = false;
            $.each(cases, function(index, value){
                if( value.isSelected ){
                    $selectedCaseFound = value;
                }
            });
            return $selectedCaseFound;
        };

        var editeTextOfSelectedCase = function editeTextOfSelectedCase($case){
            getSelectedCase().preventText = getSelectedCase().newText;
            getSelectedCase().newText = $case.text();
        };

        var selectCase = function selectCase($case){
            unselectCase();
            cases[$case.data('index')].isSelected = true;
            setCssOfCase($case);
        };

        var unselectCase = function unselectCase(){
            if( getSelectedCase() === false )
                return false;
            removeCssOfCase(getSelectedCase().$element);
            removeCaseToEditableMode(getSelectedCase().$element);
            cases[getSelectedCase().$element.data('index')].isSelected = false;
        };

        var setCssOfCase = function setCssOfClickedCase($case){
            $case.addClass('selectedCase');
            $case.addClass(params.class);

            getSelectedCase().$topCase.addClass('pointer');
            getSelectedCase().$rightCase.addClass('pointer');
            getSelectedCase().$bottomCase.addClass('pointer');
            getSelectedCase().$leftCase.addClass('pointer');
        };
编辑3:

    var $this = $(this),
        $cases = $this.find('td'),
        cases = [],
        _case = {};

    $cases.each( function(index){
        $this = $(this);

        _case = {
            $element: $this,
            isSelected: false,
            preventText: $this.text(),
            newText: $this.text(),
            caseNumbersInCurrentLine: $this.parent().find('td').length,
            lineNumbersInCurrentCase: $this.parent().parent().find('tr').length,
            index: $this.index(),
            lineIndex: $this.parent().index(),
            topIndexLine: $this.parent().index()-1,
            topIndexCase: $this.index(),
            rightIndexLine: $this.parent().index(),
            rightIndexCase: ( $this.index() - $this.parent().find('td').length ) + 1,
            bottomIndexLine: ( $this.parent().index() - $this.parent().parent().find('tr').length ) + 1,
            bottomIndexCase: $this.index(),
            leftIndexLine: $this.parent().index(),
            leftIndexCase: $this.index()-1,
            isEditable: false
        };

        _case.$topCase = $this.parent().parent().find('tr').eq(_case.topIndexLine).find('td').eq(_case.topIndexCase);
        _case.$rightCase = $this.parent().find('td').eq(_case.rightIndexCase);
        _case.$bottomCase = $this.parent().parent().find('tr').eq(_case.bottomIndexLine).find('td').eq(_case.bottomIndexCase);
        _case.$leftCase = $this.parent().find('td').eq(_case.leftIndexCase);

        cases.push(_case);
        $this.data('index', index);
    });

var removeCaseToEditableMode=函数$case{…}看起来像某种递归错误。selectCase会调用getSelectedCase或类似的东西吗?@hsz,我知道有一个命名的匿名函数表达式对调试没有帮助,所以我认为这很好。你能发布另外两个函数吗?可能堆栈溢出根本不是由removeCaseToEditableMode引起的,它可能只是被有缺陷的函数调用。请从异常中获取调用堆栈并发布它。