2012-05-29 60 views
0

我有一個要求,我只需要在文本框中只允許輸入數字。我還將文本框中的數字數量限制爲一定長度,如6。我也想允許只粘貼數字而不粘貼其他數字。例如,我複製一個數字粘貼123456這應該是允許的。假設我有一個數字(例如.123 454123$234),其中包含空格或其他字符,它不應該允許並引發錯誤。我還想修剪數字中的空格,因爲文本框的值將更新爲數據庫。請建議如何實現這一點。只允許將數字和限制複製粘貼到文本框中的數字

+0

只是值得一提的是,儘管你如何在瀏覽器中做到這一點與JavaScript,你也應該檢查服務器上的響應,如JavaScript可以禁用或覆蓋在瀏覽器中。 – AlexS

+0

你可以使用字符/鍵碼來做到這一點。
請參閱此[工作示例]。(http://jsfiddle.net/euLQA/1/) –

回答

0

您可以通過正則表達式模式驗證它! 在JavaScript中, 創建正則表達式的對象像

var patt=new RegExp(pattern,modifiers); 

function onlyNumbers(evt) 

{ 

    var e = event || evt; 
    var charCode = e.which || e.keyCode; 

    if (charCode > 31 && (charCode < 48 || charCode > 57)) 
     return false; 

    return true; 

} 
1

這絕對是一個黑客,但它是迄今爲止我發現,以限制複製/粘貼內容的唯一方法。它的當前狀態也會丟失光標位置。我使用jQuery,但沒有必要。你做什麼,是當你檢測粘貼(通過Ctrl + V或element.on('粘貼'))。然後,您選擇文本,獲取選擇內容,清理,將值分配回元素。
這裏有一個plunkr:http://plnkr.co/edit/ohgliFudb9hPTYr4w8yY 下面是一些代碼:

$(function(){ 
     var acceptableChars = {8: 'backspace', 9: 'tab', 13: 'enter', 17: 'ctrl', 
     18: 'alt', 27: 'esc', 16: 'shift', 33: 'pageup', 34: 'pageDown', 35: 'end', 
     36: 'home', 37: 'left', 38: 'up', 39: 'right',40: 'down', 46: 'delete', 
     48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5', 54: '6', 55: '7', 
     56: '8', 57: '9'}, 
     valsArr = $.map(acceptableChars, function (key, val) { return key; }), 
     ctrlPressed = false, 
     element = $('#pasteme'); 
     element.on('paste', function (e) { 
     setTimeout(function() { 
      var elVal, formattedVal; 
      element.select(); 
      elVal = document.getSelection().toString(); 
      formattedVal = formatter(elVal); 
      setValue(formattedVal); 
     }, 0); 
     }); 
     element.on('keydown keypress', function(e) { 
     if (e.which === 17) { 
      ctrlPressed = true; 
     } 
     $('.textme').text(!!acceptableChars[e.which] || ctrlPressed); 
     return !!acceptableChars[e.which] || ctrlPressed; 
     }); 
     element.on('keyup', function(e){ 
     if (e.which === 17) { 
      ctrlPressed = false; 
     } 
     }) 
     function setValue(val) { 
     console.log(val); 
     element.val(val); 
     setTimeout(function(){ element.val(val) },0); 
     setTimeout(function(){ element.val(val) },10); 
     } 
     function formatter(val) { 
     var newStr, val; 
     newStr = []; 
     Array.prototype.slice.call(val).forEach(function(char, i) { 
      if (~valsArr.indexOf(char)) { 
      newStr.push(char); 
      } 
     }); 
     console.log(newStr, val); 
     return newStr.join(''); 
     }; 
    }); 
相關問題