2015-07-02 2 views
1

Имейте текстовую область, мы вводим значения с запятой, которые можно обрабатывать для событий клавиатуры и успешно проверять. Как проверить это на копии.Как фильтровать значение, вставленное в TextArea

$(function() { 
    var kpi = document.getElementById('<%=this.d.ClientID%>').value; 
    var tb = $('#<%= TextBox.ClientID %>'); 
    $(tb).keypress(function (e) { 
     var regex = new RegExp("[0-9;]+$"); 
     var str = String.fromCharCode(!e.charCode ? e.which : e.charCode); 
     if (regex.test(str) && !($(this).val().match(/;{2,}/))) { 
      var as = $(this).val().match(/;/ig) || []; 
      var len = as.length; 
      if (len < kpi) { 
       return true; 
      } 
     } 
     e.preventDefault(); 
     return false; 
    }); 
    $(tb).keyup(function (e) { 
     var str = String.fromCharCode(!e.charCode ? e.which : e.charCode); 
     if (($(this).val().match(/[;]{2,}/g))) { 
      var shortenedString = $(this).val().substr(0, ($(this).val().length - 1)); 
      $(this).val(shortenedString); 
      return true; 
     } 
     e.preventDefault(); 
     return false; 
    }); 
    $(tb).on('paste input propertychange', function (e) { 
     //Validate interger with ; on paste and rest not allowed 
    }) 
}); 
+1

'on ('input')' должен запускать события, когда вы вставляете текст в текстовую область. Вы говорите, что это не работает? – martynasma

ответ

0

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

event.ctrlKey 
0

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

$(tb).live('keyup', function (e) { 
    this.value = this.value.replace(/[;]{2,}/g, ""); 
     } 
}); 

Это заменит точку с запятой от введенного значения при вставке в текстовое поле.