在通过javascript更改输入值后,不会触发Internet Explorer 11更改事件

时间:2017-10-31 02:00:56

标签: javascript internet-explorer-11

我遇到的问题是IE而不是Chrome。在我通过javascript更改值后,它不会触发更改事件。我认为它适用于event change的规范。当用户通过javascript更改输入时,请忽略输入,这意味着用户(javascript会)更改输入。但Chrome是聪明人,他知道用户确实看到了输入的变化,所以他触发改变:)。反正让IE的行为像Chrome一样吗?



document.getElementById('inputName').addEventListener("keyup", function(e){
	this.value += '_';
});

<body>
    <input id="inputName" value="name" onchange="document.getElementById('outputName').innerHTML = document.getElementById('inputName').value"/>
    <div id="outputName">name</div>
</body>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

改变事件被这个js动作覆盖确实看起来很奇怪......我猜这些规格相对不清楚,所以我不确定我们是否可以把它称为bug。

无论如何,你可以通过监听输入事件来自己模仿这种行为,输入事件会在每次用户确实对输入值进行更改时触发。
从那里,你只需要举起一个你将在blur事件中读到的旗帜:

&#13;
&#13;
inp.oninput = function(e) { // every time the user commits a change
  this._hasChanged = true;   // raise a flag
};
inp.onblur = function(e) {  // when we loose focus
  if (this._hasChanged &&    // only if there were some changes made by the user
      typeof this._onchange === 'function') {
    this._onchange();        // trigger our fake change event
  }
  this._hasChanged = false;  // set the flag back to false
};

inp._onchange = function(e) { // our fake onchange listener
  log.textContent = this.value;
};
inp.onkeyup = function(e) {
  this.value += '_';
}
&#13;
<input id="inp" value="name">
<pre id="log"></pre>
&#13;
&#13;
&#13;

解决方案https://jsfiddle.net/hrr3n0eh/