Запретить ввод нескольких символов, например, «<», «>» во всех текстовых полях ввода, используя jquery - PullRequest
1 голос
/ 16 июня 2010

Как мне добиться этого: - Когда пользователь вводит символ, такой как 'abcd', а затем '>' (недопустимый символ для моего приложения), я хочу установить обратно текст 'abcd'.Лучше, если мы сможем отменить сам ввод, как мы делаем в приложении winforms.Это должно происходить, когда пользователь печатает, а не нажатием кнопки.

Я хочу, чтобы это применялось ко всем текстовым полям на моей веб-странице.Это будет легко, если решение основано на jQuery.Может быть что-то, что начнется так.$("input[type='text']")

РЕШЕНИЕ Я использовал оба ответа, предоставленных @jAndy и @Iacopo (извините, не могу пометить как ответ на оба вопроса), как показано ниже.

$(document).ready(function() {
  //makes sure that user cannot enter < or > sign in text boxes.
  $("input:text").keyup(purgeInvalidChars)
      .blur(purgeInvalidChars)
      .bind('keypress', function(event) {
        if (event.which === 62 || event.which === 60)
          return (false);
      });
  function purgeInvalidChars() {
    if (this.value != this.value.replace(/[<>]/g, '')) {
      this.value = this.value.replace(/[<>]/g, '');
    }
  }
});

Хотя одна проблема все еще осталась, т.е. она не позволяет пользователю выделять текст в текстовом поле, и это происходит только в Chrome, нормально работает в IE (впервые: D), не тестироваласьFire Fox.Было бы приятно, если бы кто-нибудь нашел решение для этого или надеялся, что люди в Google решат это: D.

ОБНОВЛЕНИЕ Я решил это проверкой if (this.value != this.value.replace(/[<>]/g, '')).Также обновленное решение.

Еще раз спасибо всем ответчикам.

Ответы [ 3 ]

3 голосов
/ 16 июня 2010

Вы должны перехватить события 'keyup' и 'blur' и прикрепить их к функции, которая объединяет ввод: не забывайте, что пользователь может вставить неверную последовательность символов.

Так, например,

$('input[type="text"]').keyup(purgeInvalidChars).blur(purgeInvalidChars)

function purgeInvalidChars()
{
   this.value = this.value.replace(/[<>]/g, ''); 
} 

несомненно, вы улучшите регулярное выражение, возможно, заменив все символы, кроме включенных.

Извините, я не могу проверить свой код, поэтому вы должны принять его дипломgrano salis : -)

1 голос
/ 16 июня 2010

Пример (нажатие клавиши):

$(document).ready(function(){
    $('input:text').bind('keypress', function(event){

    if(event.which === 62 || event.which === 60)
       return(false);
    });
});​

Пример (keydown):

$(document).ready(function(){
  $('input:text').bind('keydown', function(event){
    if(event.which === 226)
       return(false);
  });
});​

Просто используйте функции preventDefault и stopPropagation для событий. Они запускаются возвратом (false) в обработчике события.

В этом примере я просто проверяю код ключа < и >, который, к счастью, находится на том же ключе. Если мы нажмем этот код, мы просто предотвратим поведение по умолчанию.

Ссылка : .preventDefault () , .stopPropagation ()

0 голосов
/ 16 июня 2010
$('#textBox').keyup(function(e){
            var myText = $('#textBox').val(); 
            myText =  myText.replace(">", "");
            myText =  myText.replace("<", "");
            $('#textBox').val(myText);
        });

- Обновление -

keyup вместо keypress

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...