javascript - jquery:修复 if() 的第一次失火

标签 javascript jquery

我的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/

相关文章:

jquery - 加载多个图像后按顺序淡入它们

javascript - 如何使用 javascript 动态隐藏元素?

javascript - 如何将 jquery 类型导入到 typescript

javascript - jqGrid : Need to make a field nonEditable in Edit Window and editable in Add Window

javascript - 从制表器中的 json 加载数据?

javascript - 将标签 “series:” 从响应服务器 JSON 插入到 Highcharts 中。格式错误的 JSON?

javascript - 使用原型(prototype)来改变现有 jQuery 函数的功能

javascript - 如何防止 Chrome 在切换选项卡后处理(?)我的 webgl 绘图上下文?

javascript - 如果测试失败,如何使 Mocha 在源文件中显示正确的行号?

javascript - 通过 "value="提交“类型 ="button"的火灾事件 - Javascript