【发布时间】:2016-09-12 18:26:20
【问题描述】:
此功能有效:
function refreshCodeMirror(){
$("textarea").each(function(){
var codeMirror = $(this).data('codeMirror');
setTimeout(function(codeMirror){
return function () {
codeMirror.refresh();
}
}(codeMirror), 10)
});
}
但是当我试图将其简化为:
function refreshCodeMirror(){
$("textarea").each(function(){
var codeMirror = $(this).data('codeMirror');
setTimeout(codeMirror.refresh, 10)
});
}
简化不起作用。
一些(可能不相关的)上下文:
正在 onclick 中调用 refreshCodeMirror 函数以获取 django 模板中的引导选项卡标题:
<div class="row">
<div class="col-md-12">
<ul class="nav nav-tabs" role="tablist">
{% for field in form_tab_fields %}
<li role="presentation"{% if forloop.first %} class="active"{% endif %}>
<a class="tab-header" href="#{{ field.id_for_label }}_tab" data-toggle="tab" onclick="refreshCodeMirror()">{{ field.label_tag }}</a>
</li>
{% endfor %}
</ul>
<div class="tab-content">
{% for field in form_tab_fields %}
<div role="tabpanel"
class="form-group tab-pane{% if forloop.first %} active{% endif %}"
id="{{ field.id_for_label }}_tab">
{{ field }}
{{ field.errors }}
</div>
{% endfor %}
</div>
</div>
</div>
上面的第一个函数一切正常,虽然我想删除所有多余的刷新调用,但它们似乎并不重要,当我使用单个文本区域(通过传递元素 id)时,工作上面的函数停止工作。
【问题讨论】:
-
那是因为定时器调用刷新是用另一个“上下文”(运行时“this”关键字指向的实例),所以需要在“this”关键字中告诉JS使用哪个实例在调用时,以 jQuery 为例: setTimeout($.proxy(cm.refresh, cm), 10)
标签: javascript jquery django twitter-bootstrap codemirror