我遇到的问题是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;
答案 0 :(得分:0)
改变事件被这个js动作覆盖确实看起来很奇怪......我猜这些规格相对不清楚,所以我不确定我们是否可以把它称为bug。
无论如何,你可以通过监听输入事件来自己模仿这种行为,输入事件会在每次用户确实对输入值进行更改时触发。
从那里,你只需要举起一个你将在blur
事件中读到的旗帜:
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;