首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript 實現輸入框只能輸入 1-15 數字、超出自動修正、禁止粘貼

     編輯:程式設計綜合問答

需求分析

  • 只能輸入數字(過濾非數字)。
  • 值範圍 1-15:小於 1 強制設為 1,大於 15 強制設為 15。
  • 禁止粘貼操作。
  • 最大長度 2 位(15 為兩位)。

完整實現代碼(原生 JS + jQuery 兩版本)

版本一:原生 JS(無依賴,推薦)

<input type="text" id="maxnum" name="maxnum" maxlength="2" 
       oninput="handleInput(this)" onpaste="return false" />

<script>
function handleInput(el) {
    // 1. 過濾非數字
    let val = el.value.replace(/\D/g, '');
    // 2. 空值不處理
    if (val === '') { el.value = ''; return; }
    // 3. 轉數字並限制範圍
    let num = parseInt(val, 10);
    if (num < 1) num = 1;
    if (num > 15) num = 15;
    // 4. 回填
    el.value = num;
}
</script>

版本二:jQuery(如項目已引用)

<input type="text" id="maxnum" name="maxnum" maxlength="2" />

<script>
$('#maxnum').on('input', function() {
    let val = this.value.replace(/\D/g, '');
    if (val === '') return;
    let num = parseInt(val, 10);
    if (num < 1) num = 1;
    if (num > 15) num = 15;
    this.value = num;
}).on('paste', function(e) {
    e.preventDefault(); // 禁止粘貼
});
</script>

關鍵點解析

需求實現方式注意點
只能輸入數字replace(/\D/g, '')oninput 事件可捕獲輸入法組合字符、刪除等所有值變化,優於 onkeyup
範圍 1-15 自動修正parseInt + Math.min/max 或 if先判斷空字串,避免 parseInt('') 產生 NaN
禁止粘貼onpaste="return false" 或 e.preventDefault()現代瀏覽器支援 onpaste,舊版 IE 需 onbeforepaste
最大長度 2maxlength="2"HTML5 原生屬性,瀏覽器自動攔截超長輸入

進階:封裝為可復用指令

// Vue 2 指令範例
Vue.directive('range', {
  inserted(el, binding) {
    const [min, max] = binding.value;
    el.addEventListener('input', () => {
      let val = el.value.replace(/\D/g, '');
      if (val === '') return;
      let num = parseInt(val, 10);
      el.value = Math.max(min, Math.min(max, num));
    });
    el.addEventListener('paste', e => e.preventDefault());
  }
});
// 使用: <input v-range="[1, 15]" maxlength="2" />

總結

使用 oninput 統一處理值過濾與範圍修正,onpaste 禁止粘貼,maxlength 限制長度。原生 JS 版本零依賴、兼容性最好,推薦直接集成。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved