2016-10-24 54 views
0

我有一個場景,我阻止用戶輸入小數點後的第二個數字。我在keydown事件上有我的代碼。 下面是我的代碼:檢查是否在keydown事件上選擇了文本

$scope.Inputkeydown = function (event, value) {   
    if (event.keyCode != 8) { 
     if (value != null && value != undefined && value != "") { 
      var regex = /^\d*\.\d$/; //this regex passes only decimal numbers with one digit after decimal 
      if (regex.test(value)) {     
        event.preventDefault(); 
      } 
     } 
    } 

};  

現在的麻煩是,如果用戶在文本框中選擇上的文字(比如50.0)說壓機5a在那個時間越來越阻止它也一樣,在文本框中值爲50.0和正則表達式允許它,它是越來越防止被鍵入英寸

如果文本被複制,我可以檢查keydown嗎?或者還有其他方法嗎?

+0

您是否試圖在'KeyPress'上觸發此事? – Weedoze

+0

如果小數點後的值爲零,您希望用戶輸入數字? – SPViradiya

回答

0

而是防止用戶進入它,你可以只按一次鍵將其刪除:

function filterDecimals(inp) { 
    return inp.replace(/^(\d*\.\d)\d*$/g, '$1'); 
} 

或者,如果你想刪除一切後,與替換第二\d*.*

編輯(使用示例)

該函數將文本作爲輸入並返回新的過濾文本。要使用這個,只需在keypress上附加一個事件處理程序,如下所示:

<input type="text" id="filteredbox"> 

<script> 
var txt = document.getElementById("filteredbox"); 

// on keyup event (you can change to keypress if you want, but this is more logical here 
txt.addEventListener("keyup", function(){ 
    // sets value of txt to the returned data from filterDecimals() 
    // if statement: only filters it if necessary; this eliminates the "selected text" issue you mentioned 
    if (this.value !== filterDecimals(this.value)) { 
     this.value = filterDecimals(this.value); 
    } 
}); 
</script> 
+0

任何方式我可以在keydown上做到這一點? – pankaj

+0

我不確定你的代碼是什麼樣的,但我用一個例子編輯了我的答案。如果您需要更多幫助,請告訴我。 – Andrew

+1

Woops!再次編輯我的代碼以修復錯誤。這現在應該適合你。 – Andrew

相關問題