IE11中的数字输入类型验证错误,可能是纯JS的解决方法?

时间:2017-01-25 20:28:49

标签: javascript html5 internet-explorer-11

IE11中数字输入类型的验证完全被破坏 - args->DrawingSession->DrawCircle(640, 360, 30.0f, Colors::Blue); 对象将始终具有ValidityStatevalid: true等。

令人恼火的是,如果输入文本的话,将其设置为null的一个区域就是将其设置为null(虽然它会为前面带有数字的文本赋值),所以我无法通过使用JS来检查它。

因此,我不知道在输入值时如何检查输入验证。我能想到的唯一解决方案是对patternMismatch: false事件进行验证,但这不仅仅是一个额外的麻烦,它不包括像将文本粘贴到输入中的边缘情况。

在我放弃之前,有没有人有任何其他建议?没有jQuery,只有纯JS。

修改:我已使用keydown事件。我遇到的问题是IE没有为输入的input属性分配无效的条目 - 因此我无法检查带有无效条目的输入和只有空条目的输入。

2 个答案:

答案 0 :(得分:1)

使用input事件,并将novalidate属性添加到您的表单,这会禁用浏览器验证:

var counterEl = document.getElementById('changes');
var count = 0;

document.getElementById('input').addEventListener('input', function() {
  counterEl.innerHTML = count++;
});
<form novalidate>
    <input type="text" id="input"/>
    <span id="changes"></span>
</form>

或者,您可以使用change事件,该事件不会经常触发。

答案 1 :(得分:0)

使用onInput代替keydown

  

窗口上输入事件的事件处理程序。元素值更改时引发输入事件。

     

此事件起泡。如果在窗口上受支持,它也支持元素。

意味着当用户键入,粘贴或模糊字段时触发它。