我每隔x秒左右刷新一次div。在这个div中我有一个textarea。我想要做的是如果用户开始输入这个textarea,那么不要刷新div,否则,保持刷新。
这是用于检测textarea中的keydown的JS,我遇到的问题是它在textarea中进行了输入,因为JS一直在为每次击键运行。我怎么能只运行一次呢?
<script type="text/javascript">
$("#comment_textarea").live('keydown', function() {
$('form #comment_textarea').elastic();
clearInterval(auto_refresh); auto_refresh = 0;
});
</script>
答案 0 :(得分:1)
这很可能是你正在调用的elastic
插件,因为清除每个击键的间隔不应该造成很多(如果有的话)延迟。
如果elastic
插件在用户关注输入元素时更改了textarea
,那么您可以将其绑定到focus
事件,这样它就不会运行击键:
<script type="text/javascript">
$(document).delegate("#comment_textarea", "keydown", function () {
clearInterval(auto_refresh);
auto_refresh = 0;
}).delegate("#comment_textarea", "focus", function () {
$('#comment_textarea').elastic();
});
</script>
注意我使用的是.delegate()
而不是.live()
。 .delegate()
允许您选择document
以外的根元素。
如果您需要在elastic
事件处理程序中进行keydown
插件调用,或者仍然存在延迟问题,则可以随时检查auto_refresh
变量的值:
if (auto_refresh !== 0) {
clearInterval(auto_refresh);
auto_refresh = 0;
}
此代码将进入您的keydown
事件处理程序。