Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改占位符会触发IE 10中的输入事件 基本问题 inputevent--调用-->update()--调用-->geoint.receive()--触发-->input事件 解释_Javascript_Jquery - Fatal编程技术网

Javascript 更改占位符会触发IE 10中的输入事件 基本问题 inputevent--调用-->update()--调用-->geoint.receive()--触发-->input事件 解释

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

好吧,我遇到了一个奇怪的问题,导致我的代码无限循环。我有以下几点jQuery:

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
事件没有任何与之关联的代码,它们只是表示输入已提交到元素。