jquery:用频率观察场

时间:2010-02-23 09:37:06

标签: javascript jquery ruby-on-rails prototypejs

我需要使用JQuery来检测文本文件的更改,因此调用了一些ajax。

诀窍是我真的不想将此动作绑定到模糊或键盘事件;前者对于用户来说太麻烦,第二个是“太中等”:用户在ajax调用完成之前键入新密钥,因此用户体验不是很好(因此this SO question上的答案不是适用于我的情况。)

我需要的是一些代码,用于检查字段值是否已更改,但是定期(即每0.5秒)。我想在几个字段上使用相同的代码,调用不同的ajax函数,具有不同的频率,因此重用在这里真的是一个加分。

On Rails我有observe_field(内部使用Prototype的Form.Element.observer,我认为)就是这样做的。我怎样才能在JQuery上完成相同的事情?

3 个答案:

答案 0 :(得分:5)

我最终滚动了自己的jquery插件。

它(松散地)基于Mic的实施。

为它创建了一个github项目:

http://github.com/splendeo/jquery.observe_field

与Mic的主要区别在于:

  • 我在几个地方使用jQuery的方法而不是本地方法。
  • 我没有激活/停用检测onblur和onfocus。通过这种方式,我可以跟踪代码所做的更改(rails的observe_field执行此操作,我想模仿它)
  • 我在每个onkeyup上重置了计时器。我需要这个才能很好地使用移动设备,例如iphone。

快速摘要:

$(function() {
  // Executes a callback detecting changes with a frequency of 1 second
  $("#item1").observe_field(1, function( ) {
    alert('Change observed! new value: ' + this.value );
  });
});

答案 1 :(得分:2)

这是一个使用简单JS函数的解决方案:How do I grab the value from an html form input box as its being entered?
如果愿意,可以使用$(...)。focus(...)调用将其与jquery一起使用。

在场上的onfocus上,定期检查值是否已更改,如果是,则调用回调函数“after”。
当离开现场时,在onblur处停止投票。

即使用户在字段中进行了一些间接更改,例如撤消/重做或复制/粘贴,这也会有效。

答案 2 :(得分:0)

您可以设置一个计时器来检查输入的每个 n 秒,有一个jQuery插件可以更好地控制计时器。

http://jquery.offput.ca/every/