更改占位符会触发IE 10中的输入事件
Changing placeholder triggers input event in IE 10
基本问题
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;
正在触发该字段上的CCD_ 6事件。您可以看到这是如何产生问题的,因为这会创建一个无限循环。我确信这就是发生的事情,因为当我在那行之前return
时,循环不会发生。此外,如果我改为keyup
事件,循环也不会发生。
问题
为什么会发生这种情况,我该如何解决?
我试过了
我已经看了几个小时了,做了很多搜索都没有结果。此代码在Chrome和FF中正常工作。
有趣的是,如果您只是将一个项目添加到INPUT属性占位符或拉丁字母以外的值,就会发生INPUT事件。这是IE10和IE11 的问题
var $input = $('<input type="text" placeholder="Бубу"/>');
//or
var $input = $('<input type="text" value="世界へようこそ"/>');
$input.on('input',function(){
alert('input even occur');
});
在没有看到你的小提琴的情况下,我认为你可以用以下代码来解决这个问题:
var previousGeoInput = '';
var geoInput = $('#Geo').on('input', function() {
if (previousGeoInput === this.value) {
return;
}
previousGeoInput = this.value;
_this._controller.update({
geo: this.value
});
}).get(0);
检查事件keycode/charcode,如果它为0,则表明IE愚蠢,您可以取消该事件。
相关文章:
- 我能从“;输入“;事件是否有更好的方法来跟踪文本更改
- Node.js输入数据事件停止
- 如何创建一个在JavaScript中执行与键盘输入相同事件的按钮
- 如何使用输入模糊事件更新多个具有相同类名的标签的文本
- 在 JQuery 中的复选框上输入关键事件
- 使用输入/输出事件在 Angular 2 中的父组件中触发方法
- 点击上传文件后上传图片!按钮不输入更改事件
- JQuery 焦点,无需输入关键事件快捷方式
- 按键,键控和更改具有相同类名的输入的事件
- 取消表单提交,但允许输入键事件
- JQuery 输入类事件捕获在 MVC 5 ASP.NET 不起作用
- 在数字输入中输入小数时触发输入更改事件
- Javascript-在iframe中输入更改事件
- knockout.js输入框事件更改-传递旧值
- 使用DOM更新时不会触发输入文本事件
- 聚合物输入改变事件
- 谷歌搜索页面-条形码输入触发事件
- Angular.js文件上传器输入onChange事件问题
- 脊梁-怎么通过这个.骨干视图中文件输入更改事件
- 如何使用Javascript验证用户输入添加事件监听器