Javascript 更改占位符会触发IE 10中的输入事件 基本问题 inputevent--调用-->update()--调用-->geoint.receive()--触发-->input事件 解释
好吧,我遇到了一个奇怪的问题,导致我的代码无限循环。我有以下几点jQuery:Javascript 更改占位符会触发IE 10中的输入事件 基本问题 inputevent--调用-->update()--调用-->geoint.receive()--触发-->input事件 解释,javascript,jquery,Javascript,Jquery,好吧,我遇到了一个奇怪的问题,导致我的代码无限循环。我有以下几点jQuery: var geoInput = $('#Geo').on('input', function() { _this._controller.update({ geo: this.value }); }).get(0); 正如您所看到的,它只是一个基本的事件侦听器,它在我的控制器中调用一个更新函数。在更新功能的末尾是一种方法,用于广播geoint字段进行更新。这由以下人员处理: geoInput.rece
var geoInput = $('#Geo').on('input', function() {
_this._controller.update({
geo: this.value
});
}).get(0);
正如您所看到的,它只是一个基本的事件侦听器,它在我的控制器中调用一个更新函数。在更新功能的末尾是一种方法,用于广播geoint
字段进行更新。这由以下人员处理:
geoInput.receive = function(formState) {
this.value = formState.geo;
this.placeholder = _this._placeholders.geo;
}
出于某种原因
this.placeholder = _this._placeholders.geo;
正在触发该字段上的输入
事件。您可以看到这是如何产生问题的,因为这会创建一个无限循环。我确信这就是正在发生的事情,因为当我返回该行之前的时,循环不会发生。另外,如果我改为说,keyup
事件,循环也不会发生
问题:
为什么会发生这种情况?我如何修复它
我试过了!
我已经看了好几个小时了,做了很多搜索都没有结果。这段代码在Chrome和FF中可以正常工作。在看不到您的小提琴的情况下,我认为您可以用这段代码解决问题:
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,那么它就是愚蠢的,你可以取消事件。有趣的是,如果你只是向输入属性placheholder或拉丁字母以外的值添加一个项目,就会发生输入事件。
这是IE10和IE11的问题
var $input = $('<input type="text" placeholder="Бубу"/>');
//or
var $input = $('<input type="text" value="世界へようこそ"/>');
$input.on('input',function(){
alert('input even occur');
});
var$input=$('');
//或
变量$input=$('');
$input.on('input',function(){
警报(“输入甚至发生”);
});
你能为此创建一个循环吗?一个简单的检查能防止无限循环吗`如果(this.placeholder!==\u this.\u placeholders.geo){this.placeholder=\u this.\u placeholders.geo;}我现在正在处理小提琴!我还在做小提琴。问题是,这是一个更大项目的一部分,我正试图尽可能地将其最小化,这样我就可以省去一些东西。执行if语句将不起作用,因为无论是否设置占位符,都会发生这种情况。仅仅设置占位符的行为就把它弄乱了input
事件没有任何与之关联的代码,它们只是表示输入已提交到元素。