javascript - 为什么 keyup 有效但 keydown 无效
问题描述
我有一个输入类型=“数字”,其中最小值为 1,最大值为 10。我想防止输入大于或小于最大值和最小值的值,所以我使用这个脚本:
$('input[name=inputModal1]').keyup(function(){
if($(this).val()>10){
$(this).val(10);
}else if($(this).val()<1){
$(this).val(1);}
});
$('input[name=inputModal2]').keydown(function(){
if($(this).val()>10){
$(this).val(10);
}else if($(this).val()<1){
$(this).val(1);}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="number" name="inputModal1" min="1" max="10" value="1">
<input type="number" name="inputModal2" min="1" max="10" value="1">
在这种情况下,脚本可以工作,但我想使用keydown
,它可以防止输入多于或少于最大值和最小值,但keyup
如果用户按下并按住按钮,则会或多或少地输入。不工作的原因可能keydown
是什么?我可以删除该值,使其超过 10,等等。
如果您需要更多信息,请与我们联系。
解决方案
问题与事件的顺序有关。在设置值之前keydown
触发元素。因此,当事件触发时,这会混淆您的逻辑。$(this).val()
''
要解决此问题并改进行为,请改用input
事件。这可以根据您的需要工作,并且当用户以任何方式向元素添加内容时也会触发 - 例如通过鼠标粘贴。
此外,您可以使用Math.min()
andMath.max()
使您的逻辑更简洁。尝试这个:
$('input[name=inputModal]').on('input', function() {
$(this).val((i, v) => Math.max(Math.min(this.value, 10), 0));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="number" name="inputModal" min="1" max="10">
推荐阅读
- java - 如何获取 Swing 组件的默认最小尺寸?
- python - 为什么 Python 说我使用 Tkinter 时没有定义“应用程序”?
- java - 通过 oracle 直接连接到 db2 数据库时,它会连接,但是通过 java 代码连接时会抛出异常
- python - 使我的代码在阅读和性能方面更好
- javascript - 从 Javascript 应用程序在 Ajax 请求中发送 base64 字符串给我 413 错误
- json - Flutter - 保存用户数据
- android - 由于“缺少功能:手表”,无法安装其中包含 Watchface 作为库的 Android APK
- azure - 事件中心处理错误
- razor - post_logout_redirect_uri ASP NET Core 2.2 AzureAD Razor 类库 RCL
- javascript - HTML - 复制和应用唯一 ID在一个