2016-07-30 44 views
1

我有一個輸入框,看起來像這樣:的Javascript鍵盤事件改變標記的文本

<input type="text" name="definemonth" value="'.$monthStart.'" class="form-control" 
onkeypress="return isNumberKey(event, this.value);" /> 

爲了讓1和28之間只有數字(每個含)我寫這PISE JS代碼:

var input = event.key; 
var newValue = value + input; 

if(input == "ArrowLeft" || input == "ArrowRight" || input == "ArrowUp" || 
    input == "ArrowDown" || input == "Backspace" || input == "Delete" || input == "Enter") 
{ 
    return true; 
} 

if (!input.match("^[0-9]$") || newValue > 28 || newValue < 1) 
{ 
    return false; 
} 

return true; 

它主要是我想要的。我希望能夠使用箭頭鍵,退格鍵和刪除按鈕,這一切都很好。但問題是,我不能標記文本,然後添加一個新號碼。帶標記我的意思是這種標記:enter image description here 標記正常工作,但任何關鍵筆畫都不會改變任何內容。

我試着用

console.log(input); 

檢測發生的事情有,但我完全不得到在控制檯的任何輸出。

我的問題是那麼我該如何更改我的代碼,以便能夠在標記文本時輸入新值,並且例如鍵入1。

回答

0

您應該在檢查允許性的新值之前清除選定的文本。

像這樣:

var clearValue = element.value; 
clearValue = clearValue.slice(0, element.selectionStart) + clearValue.slice(element.selectionEnd); 

var newValue = clearValue + input; 

jsfiddle

+0

很大,這個工程。但我不完全理解它。我會接受你的答案,如果你能解釋這一點,我也會upvote :) – JRsz