jquery:修复 if() 的第一次失火
jquery: fix first misfire of if()
My js fiddle is here:http://jsfiddle.net/brvnhg1w/
(请先运行上面的小提琴)如果你双击这三个点,它会变成一个文本框,一旦你点击退出按回车键,它就会恢复为文本。这工作正常。
如果文本已更改,我想通过 ajax 调用在数据库中进行更新,但是第一次更改文本(例如:从三个点更改为例如"111"),如果您在控制台中查看,它会显示"未更改"而不是"已更改",如果您查看以下行:console.log("Id: "+this.id+ " Value: " +this.value+ " OldValue:" +v );
在控制台中打印, 出于某种原因,它采用新值并将其打印为上一个值:(
所以基本上:如果我在"更改"部分有我的 ajax 代码,客户端第一次更改文本框时 - 它不会触发...... :(
问题似乎出在代码的这一部分:
var n = prev.ix.indexOf(this.id);
var v=prev.val[n];
if(this.value!=v){
//value changed
console.log("changed");
prev.val[n]=this.value;//update existing value
// do .ajax - update the DB
}else{
console.log("unchanged");
}
console.log("Id: "+this.id+ " Value: " +this.value+ " OldValue:" +v );
问题是当您检查当前输入是否在数组中时,您设置了值。因此,一旦您达到条件,该值将始终与第一次相同。
为了解决这个问题,不要在数组中推送一个值,而是将一个空字符串推送''
:
if($.inArray(this.id,prev.ix) == -1){
prev.ix.push(this.id);
prev.val.push('');
}
小提琴 : http://jsfiddle.net/brvnhg1w/5/
当函数第一次触发时(以及每个后续时间),您将值推送到数组中 prev
.但这是与值进行比较的数组,因此它将第一个值与自身进行比较并记录"不变"。您可能需要为初始运行编写边缘情况:
var n = prev.ix.indexOf(this.id);
var v=prev.val[n];
var flag = true;
if(this.value!=v || flag){
//value changed
console.log("changed");
prev.val[n]=this.value;//update existing value
// do .ajax - update the DB
//set flag to false, initial run over
flag = false;
}else{
console.log("unchanged");
}
console.log("Id: "+this.id+ " 值: " +this.value+ " OldValue:" +v );
http://jsfiddle.net/5eru6mt2/1/
- 相同的RegExp返回不同的结果-第一次是正确的结果,第二次是null
- 删除确认对话框在第一次单击时不起作用
- Javascript:JSON请求仅在第一次工作
- 推特引导:弹出窗口不会在第一次点击时出现,但会在第二次点击时显示
- 角度提交仅进行第一次v2错误
- 设置第一次执行的超时
- 为第一次尝试Javascript的经验丰富的开发人员提供建议
- jQuery on()-不;第一次点击时无法工作
- 第一次点击动态创建的表后,点击不工作
- 在Rails中第一次单击后禁用链接,Coffeescription
- PHP和JS脚本的奇怪问题,在我刷新页面之前第一次失败
- 循环中的切换脚本只适用于第一次迭代
- 在没有焦点的情况下捕获画布上的第一次单击事件
- Javascript onclick事件在第一次单击时未启动
- 让jqGrid第一次工作
- addClass,它更改bg图像,但在第一次加载时没有闪烁
- Cordova AngularJS Ionic标签的内容在第一次加载时重叠
- show-hide只在ajax调用中第一次工作
- 修改body's在第一次绘画前上课
- jquery:修复 if() 的第一次失火