如何检测表单输入的值自设置以来是否发生了变化
How to detect whether a form input's value has changed since set
我目前正在创建一个定制的CMS。我正在处理的具体部分与管理图片库有关。在用户可以更新某个相册中的详细信息的页面上,我使用jQuery的$.ajax
进行了大量的更新。
例如,每个图像旁边都有一个标题字段,我将focusout
事件绑定到我的ajax调用,这工作得非常好,并且使用户可以快速浏览和更新照片的所有标题。
然而,由于我绑定了focusout
事件,它可能会被调用很多次,特别是在没有必要的时候。例如,他们在三个不改变的字段中分页。每次他们按tab键时,即使他们没有改变输入值,也会进行$.ajax
调用。
所以,我的问题是如何存储和检测一个值是否不同于它最初(或最后一次ajax调用)?
可以使用jQuery的.data()
吗?
正确执行此操作的关键是将数据与输入字段分开。当用户模糊输入框时,您可以根据内存中的数据检查该值。如果值不同,则执行ajax请求。如果没有,你什么都不做,节省往返的时间。
你可以自己写这些,但是最近几年出现的一些框架在这方面做得很好。其中包括:
Backbone.js
Spine.js
Knockout.js
Backbone似乎是其中最受欢迎的。
您必须将原始值存储在隐藏的输入类型中,并在每个focusout事件中比较原始值和当前值。
使用非常简单的jQuery解决:
在document.ready:$('.caption_field').each(function() {
var startval = $(this).val();
$(this).data('setval',startval);
});
ajax调用时:
if (caption == $(this).data('setval')) return; // not changed
当调用成功返回时:
field.data('setval',caption);
相关文章:
- 这样链接时是否可以设置转换
- 是否有任何设置阻止JavaScript在系统上工作
- 是否可以在调用时动态设置Jquery Accordion的活动面板
- 是否可以使用flexbox显示模型设置元素的滚动位置
- 如何检查日期选择器和时间选择器元素是否使用JQuery/Javascript设置
- 是否有任何内置方法可以更改JavaScript对象'的属性设置为某个值
- 检查是否已设置GET变量
- 是否可以在网页上用另一种字体设置jqmath-display的样式
- 是否可以在reactjs中设置多个状态变量
- Javascript-检查是否设置了cookie
- Javascript 测试是否设置了变量
- 如何检测 javascript 文件是否被 IE11 安全设置阻止
- Javascript:是否可以在2D画布中为不同的文本设置不同的字体大小
- 我们是否需要设置超时进行短轮询
- 是否可以像在$routeProvider中一样在 Angular AMD 中设置页面标题
- 检测价格是否高于或低于200.00,然后设置(此)表格行的样式
- 是否可以设置柔盒插入、移除和项目位置的动画
- 是否可以在Internet Explorer 11中使用JavaScript设置选择元素的大小属性
- Symfony sfValidators:动态设置是否需要值
- 如何检查评级设置是否由 SharePoint 2010 中的 Javascript 启用