【发布时间】:2012-06-14 03:22:25
【问题描述】:
我正在尝试调用一个我知道存在于变量上的函数,但由于某种原因,我无法从传递的函数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));
}
}
});
这是来自 chrome 控制台的错误日志
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
【问题讨论】:
-
去掉
onUpdate后多余的逗号还能用吗? -
是否有可能在
CodeMirror的实际初始化过程中调用了onUpdate回调,从而导致对myCodeMirror的分配仍未发生?还是您稍后会收到错误消息?尝试在两个myCodeMirror.save()行设置一个断点,看看哪个先执行。另外,您确定不能在onUpdate回调中将CodeMirror实例引用为this,从而避免使用myCodeMirror引用吗? -
是的,不幸的是在 onUpdate 中使用它还没有 save() 功能。我做了一个
onUpdate : console.log(this);并没有保存
标签: javascript variables scope