input
事件 - 调用 - > update()
- 调用 - > geoInput.receive()
- 触发器 - > 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中按预期工作。
答案 0 :(得分:1)
有趣的是,如果您只是将项目添加到INPUT属性placheholder或拉丁字母以外的值,则会发生INPUT事件。 这是IE10和IE11的问题
var $input = $('<input type="text" placeholder="Бубу"/>');
//or
var $input = $('<input type="text" value="世界へようこそ"/>');
$input.on('input',function(){
alert('input even occur');
});
答案 1 :(得分:0)
如果没有看到你的小提琴,我想你可以用这段代码解决问题:
var previousGeoInput = '';
var geoInput = $('#Geo').on('input', function() {
if (previousGeoInput === this.value) {
return;
}
previousGeoInput = this.value;
_this._controller.update({
geo: this.value
});
}).get(0);
答案 2 :(得分:-1)
检查事件keycode / charcode是否为0然后它是IE愚蠢的你可以取消该事件。