我正在尝试验证表单中的文本输入,以使用javascript和Jquery构建基本转换器。使用addEventListener函数,我能够调用一个对应于选项" 2"," 10"和" 16"来自Select标签。
问题在于它只适用于第一次"更改" Select标签上的事件以及当我从base减少时。例如:如果我选择base 2然后更改为10或16,它仍然只接受0或1个字符,而从16更改为10或2它可以正常工作。我该如何解决?
这是我的代码:
$(document).ready(function() {
var getFromBase = document.getElementById('frombase-select');
getFromBase.addEventListener('change', function() {
switch (getFromBase.value) {
case '2':
$('#number').keypress(function(key) {
if ((key.charCode < 48 || key.charCode > 49) && (key.charCode != 13)) {
return false;
}
});
break;
case '10':
$('#number').keypress(function(key) {
if ((key.charCode < 48 || key.charCode > 57) && (key.charCode != 13)) {
return false;
}
});
break;
case '16':
$('#number').keypress(function(key) {
if ((key.charCode < 48 || key.charCode > 57) && (key.charCode < 97 || key.charCode > 102) && (key.charCode < 65 || key.charCode > 70) && (key.charCode != 13)) {
return false;
}
});
break;
} // End switch
}); // End addEventListener
}); // End document.ready
&#13;
.wrapper {
height: 90vh;
display: flex;
align-items: center;
justify-content: center;
}
form {
font-size: 20px;
width: 300px;
text-align: center;
border: 1px solid black;
padding: 20px;
}
form>* {
margin: 10px 0;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
<form action="index.php" method="post">
<div class="form-group flex-center">
<label>From Base:</label>
<select id="frombase-select" name="frombase">
<option selected disabled hidden>Enter a base</option>
<option>2</option>
<option>10</option>
<option>16</option>
</select>
</div>
<div class="form-group flex-center">
<label>Number:</label>
<input type="text" id="number" name="number">
</div>
</form>
</div>
&#13;