2016-10-24 6 views
0

У меня есть сценарий, в котором я запрещаю пользователю вводить 2-й число после десятичной. У меня есть код для события 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) в текстовом поле и говорят прессы 5 в то время это становится предотвращено тоже, как и в значение текстового поля является 50,0 и регулярное выражение позволяет ему идти, и ему не удается ввести его.

Могу ли я проверить наличие ключа, если текст копируется ?? или есть ли другой способ?

+0

Вы пытались вызвать это на 'KeyPress'? – Weedoze

+0

Вы хотите, чтобы пользователь вводил цифру, если значение после десятичной точки равно нулю? – SPViradiya

ответ

0

Вместо того, чтобы предотвратить ввод пользователем, вы можете просто удалить его после нажатия клавиши:

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

Или, если вы хотите, чтобы удалить все после того, как он, заменить второй \d* с .*

EDIT (пример использования)

Эта функция принимает текст как ввод и возвращает новый отфильтрованный текст. Чтобы использовать это, просто прикрепите обработчик событий на 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

Смежные вопросы