我的js fiddle 在这里:http://jsfiddle.net/brvnhg1w/
(请先运行上面的 fiddle )如果您双击三个点,它会变成一个文本框,一旦您单击按下回车键,它就会恢复为文本。效果很好。
如果文本已更改,我想通过 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('');
}
fiddle :http://jsfiddle.net/brvnhg1w/5/
关于javascript - jquery:修复 if() 的第一次失火,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26980018/