基本问题
input
事件 --calls--> update()
--calls--> geoInput.receive()
--triggers-->input
事件
解释
好的,我遇到了一个奇怪的问题,导致我的代码无限循环。我有以下 jQuery:
var geoInput = $('#Geo').on('input', function() {
_this._controller.update({
geo: this.value
});
}).get(0);
如您所见,它只是一个基本的事件侦听器,它在我的控制器中调用更新函数。在更新函数的末尾是一个广播geoInput
以更新字段的方法。这由以下处理:
geoInput.receive = function(formState) {
this.value = formState.geo;
this.placeholder = _this._placeholders.geo;
}
由于某些原因
this.placeholder = _this._placeholders.geo;
正在触发该input
字段上的事件。您可以看到这可能会产生问题,因为这会创建一个无限循环。我确定这是正在发生的事情,因为当我return
在那条线之前没有发生循环。另外,如果我改为说一个keyup
事件,循环也不会发生。
问题
为什么会发生这种情况,我该如何解决?
我试过了!
我已经看了好几个小时,做了很多次搜索都无济于事。此代码在 Chrome 和 FF 中按预期工作。