HTML Select 报告 IE 11 中更改事件的有效性错误
HTML Select reports wrong validity on change event in IE 11
我正在尝试将更改事件处理程序添加到 select 标记,但出于某种原因,IE 报告了错误的有效性 - 无论如何它始终有效。 see plunk
奇怪的是,如果我随后在控制台中手动检查 select 标签并键入 [=13=].validity.valid
,它会报告正确的值。
代码如下:
<select name="choices" id="sel" required>
<option value="">Nothing</option>
<option value="1">1</option>
<option value="2" selected>2</option>
<option value="3">3</option>
</select>
<span id="output"></span>
<script>
document.addEventListener('DOMContentLoaded', function() {
document.getElementById('sel').addEventListener('change', function(event) {
document.getElementById('output').innerHTML = 'Field value: ' + event.target.value + '; Valid: ' + event.target.validity.valid;
});
});
</script>
这是 IE 中的错误还是我的代码?
Chrome 顺便说一句,一切正常。
这是一个浏览器怪癖,因此您需要检查实际的字符串。提示是始终这样做,不要依赖浏览器将 "empty" 字符串设置为 false/true,因为如果这样做,您将 运行 陷入这些小怪癖。
这是一个如何做到这一点的例子:
document.addEventListener('DOMContentLoaded', function() {
document.getElementById('sel').addEventListener('change', function(event) {
var current = event.target.value;
if( current == ''){ event.target.value = false; }
document.getElementById('output').innerHTML = 'Field value: ' + current + '; Valid: ' + event.target.validity.valid;
});
});
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
</head>
<body>
<select name="choices" id="sel" required>
<option value="">Nothing</option>
<option value="1">1</option>
<option value="2" selected>2</option>
<option value="3">3</option>
</select>
<span id="output"></span>
</body>
</html>
我正在尝试将更改事件处理程序添加到 select 标记,但出于某种原因,IE 报告了错误的有效性 - 无论如何它始终有效。 see plunk
奇怪的是,如果我随后在控制台中手动检查 select 标签并键入 [=13=].validity.valid
,它会报告正确的值。
代码如下:
<select name="choices" id="sel" required>
<option value="">Nothing</option>
<option value="1">1</option>
<option value="2" selected>2</option>
<option value="3">3</option>
</select>
<span id="output"></span>
<script>
document.addEventListener('DOMContentLoaded', function() {
document.getElementById('sel').addEventListener('change', function(event) {
document.getElementById('output').innerHTML = 'Field value: ' + event.target.value + '; Valid: ' + event.target.validity.valid;
});
});
</script>
这是 IE 中的错误还是我的代码?
Chrome 顺便说一句,一切正常。
这是一个浏览器怪癖,因此您需要检查实际的字符串。提示是始终这样做,不要依赖浏览器将 "empty" 字符串设置为 false/true,因为如果这样做,您将 运行 陷入这些小怪癖。
这是一个如何做到这一点的例子:
document.addEventListener('DOMContentLoaded', function() {
document.getElementById('sel').addEventListener('change', function(event) {
var current = event.target.value;
if( current == ''){ event.target.value = false; }
document.getElementById('output').innerHTML = 'Field value: ' + current + '; Valid: ' + event.target.validity.valid;
});
});
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
</head>
<body>
<select name="choices" id="sel" required>
<option value="">Nothing</option>
<option value="1">1</option>
<option value="2" selected>2</option>
<option value="3">3</option>
</select>
<span id="output"></span>
</body>
</html>