我有几个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,它可以正常工作!
谢谢!
答案 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 的细微差别