延迟函数onkeyup不保留this.value

时间:2017-03-14 02:50:04

标签: jquery

我有几个texarea框用php中的循环生成(来自mysql)。每个textarea都使用onchange事件将其值保存在db中。我决定一个更好的方法来保存它是onkeyup,有一个延迟,但我有问题传递this.value,它返回undefined。

以下是代码:

<textarea class="form-control" rows="3" id="disgnostic<?php echo $orden;?>"
 onkeyup="delay(function(){userAction('update_diag', '<?php echo $orden;?>', this.value);}, 1500)">
<?php echo $r['diagnostico']; ?>
</textarea>

JS:

var delay = function(){
    var timer = 0;
    return function(callback, ms){
        clearTimeout (timer);
        timer = setTimeout(callback, ms);
    }  
}();

一切正常,只有这个。值返回未定。没有dalay,它可以正常工作!

谢谢!

2 个答案:

答案 0 :(得分:0)

当你调用延迟函数时,你正在丢失这个上下文,你应该这样做:

HTML:

<textarea class="form-control" rows="3" id="textOne"
onkeyup="delay(function(){alert(this.value);}.bind(this), 1500)">
</textarea>

关于js:

var delay = function(){
  var timer = 10;
  return function(callback, ms){
    clearTimeout (timer);
    timer = setTimeout(callback, ms);
  }  
}();

答案 1 :(得分:0)

除了上下文之外,一切都很好。以这种方式更改onkeyup功能可以解决您的问题

onkeyup="delay(function(){userAction('update_diag', '<?php echo $orden;?>', this.value);}.bind(this), 1500)"

注意匿名onkeyup函数上的 bind ,它很难绑定函数的上下文

上下文在JavaScript中可能令人困惑,我建议this chapter了解 this 的细微差别

相关问题