2013-05-28 5 views
3

Как отключить специальные символы от вставки в текстовое поле?Как отключить специальные символы от вставки в текстовом поле

Im используя OnKeyPress обработчик события

function disableOtherChar(evt) { 
    var charCode; 
    charCode = (evt.which) ? evt.which : evt.keyCode; 
    var ctrl; 
    ctrl = (document.all) ? event.ctrlKey : evt.modifiers & Event.CONTROL_MASK; 
    if ((charCode > 47 && charCode < 58) || (charCode > 64 && charCode < 91) || (charCode > 96 && charCode < 123) || charCode == 8 || charCode == 9 || charCode == 45 || (ctrl && charCode == 86) || ctrl && charCode == 67) { 
     return true; 
    } else { 
     $(":text").live("cut copy paste", function (e) { 
      e.preventDefault(); 
     }); 
     return false; 
    } 
} 

Но оно не блокировать специальные символы при вставке, только при поступлении,

+0

Попробуйте обработать событие 'onpaste', а также –

+0

Ive попробуйте, но он не работает – JeAr

+1

Что именно не работает - можете ли вы разработать? В отличие от keypress, где вы обрабатываете один символ за раз - с помощью onpaste вам придется работать с полной строкой, у которой уже есть недопустимые символы, вам просто нужно удалить их –

ответ

8

Предположим, что у вас есть вход

<input id="textInput" name="textInput"> 

и у вас есть следующий скрипт для проверки копии:

$(function(){ 

    $("#textInput").bind('paste',function() 
    { 
     setTimeout(function() 
     { 
      //get the value of the input text 
      var data= $('#textInput').val() ; 
      //replace the special characters to '' 
      var dataFull = data.replace(/[^\w\s]/gi, ''); 
      //set the new value of the input text without special characters 
      $('#textInput').val(dataFull); 
     }); 

    }); 
}); 
0

не ответ, просто комментарий о:

var ctrl; 
ctrl = (document.all) ? event.ctrlKey:evt.modifiers & Event.CONTROL_MASK; 

Пожалуйста, научитесь использовать обнаружение функции, вызывая поведение на основе вывода объекта, обречено на провал, по крайней мере, некоторое время.

Кроме того, не используйте код ключа, проверьте фактические символы. Например, если вы просто хотите, чтобы буквы, цифры и некоторые другие:

function hasInvalidChars(s) { 

    // allow letters, spaces, numbers only 
    var validChars = /[\w\s\d]/gi; 
    var x = s.replace(validChars, ''); 
    return !!x.length; 
} 

alert(hasInvalidChars('asdf1234 1234asd')); // false 
alert(hasInvalidChars('asdf1.234 1234asd')); // true 

Расширить набор допустимых символов, что вы хотите.

О, если вы хотите его как однострочника:

function hasInvalidChars(s) { 
    return !!s.replace(/[\w\s\d]/gi, '').length; 
} 
0

Вы можете использовать сторонний плагин, например jquery.alphanum, он также работает для вставки (ctrl + v). код выглядит следующим образом:

$("input").alphanum();

Или вы могли бы использовать его в более spceficied образом, как это:

$("#elemet").alphanum({ 
    allow  : "asd", 
    disallow : "[email protected]#", 
    allowUpper : false 
}); 

выше код, который нужно добавить его в декларации JQuery.

Я уже говорил о том, что вы можете также изменять черный список массив из сценария jquery.alphanum.js на линии 124. Вы найдете имя функции getBlacklistAscii, в том, что вы изменяете var blacklist = ... к тому, что вам подходит.

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