2

変数に存在することがわかっている関数を呼び出そうとしていますが、何らかの理由で、渡された関数内から呼び出すことができませんonUpdate

//set up the mirror when view is expanded
function attachMirrorListener(section, mirror) {
    var textarea = document.getElementById(mirror.attr('id'));
    var input = $(mirror.data('input'));
    var myCodeMirror;
    section.click(function() {
        if(section.hasClass('open') && !section.hasClass('mirror-added')) {
            section.addClass('mirror-added');

            input.attr('value','test value!!');
            myCodeMirror = CodeMirror.fromTextArea(textarea, {
                onUpdate : function(){ myCodeMirror.save(); //does not work here!!
                    },
            });

        }
        console.log(myCodeMirror);
        myCodeMirror.save(); //works here
    });


}
});

アップデート

コードを再配置しようとしましたが、まだ機能しません

jQuery(document).ready(function($) {
    var _codeMirror;
    //setup code-mirror
    $('.customize-section').each(function() {
        var section = $(this);
        var mirror = section.find('textarea.wpec-tc-code-mirror');
        if(mirror.length > 0) {
            attachMirrorListener(section, mirror);
        }
    });
    //set up the mirror when view is expanded
    function attachMirrorListener(section, mirror) {
        var textarea = document.getElementById(mirror.attr('id'));
        var input = $(mirror.data('input'));

        section.click(function() {
            if(section.hasClass('open') && !section.hasClass('mirror-added')) {
                section.addClass('mirror-added');
                _codeMirror = CodeMirror.fromTextArea(textarea, {
                    onUpdate : codemirrorcallback,
                });

            }
        });
        function codemirrorcallback() {
            _codeMirror.save();
            input.val(escape(textarea.value));
        }

    }

});

これはクロムコンソールからのエラーログです

Uncaught TypeError: Cannot call method 'save' of undefined codemirror.js:26 codemirrorcallback codemirror.js:26 endOperation codemirror.js:1864 instance.(anonymous function) codemirror.js:1871 CodeMirror codemirror.js:95 CodeMirror.fromTextArea codemirror.js:2114 (anonymous function) codemirror.js:19 f.event.dispatch load-scripts.php:3 f.event.add.h.handle.i

4

1 に答える 1

0

代入演算子は右から左に機能します。myCodeMirror.save()したがって、初めて呼び出すときmyCodeMirrorは、まだ定義されていません。

var myCodeMirror; //undefined

myCodeMirror = CodeMirror.fromTextArea(textarea, {
    onUpdate : function() { 
        myCodeMirror.save(); //still undefined 
    }
});

this.save()代わりに、内部の onUpdate 関数内から呼び出す必要があります。

于 2012-06-11T08:25:09.590 に答える