Удаление ненужных символов из текстового поля с помощью JQuery - PullRequest
4 голосов
/ 25 июня 2009

Что я хотел бы получить, так это как удалить определенные символы из текстового поля (или текстовой области) с помощью JQuery. У меня есть код на C #, но я не могу перевести его в JQuery Javascript. Моя проблема в том, что я не знаю, как получить значение из текстового поля в виде массива символов, который я затем могу просмотреть и сравнить с заданным набором нежелательных символов. Вот как «далеко» я зашел в JQuery:

$("input[type=text], textarea").change(function() {

   // code here

});

Это мой код в C #:

for (int i = 0; i < charArray.Length; i++)
{
    current = charArray[i];
    if ((current == 0x9) ||

        (current == 0xA) ||

        (current == 0xD) ||

        ((current >= 0x20) && (current <= 0xD7FF)) ||

        ((current >= 0xE000) && (current <= 0xFFFD)))
        _validXML.Append(current);
}

return _validXML.ToString().TrimEnd((char)32, (char)160) ;

UPDATE:

Ниже приведена комбинация некоторых ответов (я их опишу), и мой последний JQuery выглядит следующим образом и работает:

$(document).ready(function() {
    $(":text, textarea").change(function() {
        var text = "";
        var arr = $(this).val()
        $.each(arr, function(i) {
            var c = arr.charCodeAt(i);
            if ((c == 0x9) ||
                (c == 0xA) ||
                (c == 0xD) ||
                (c >= 0x20 && c <= 0xD7FF) ||
                (c >= 0xE000 && c <= 0xFFFD)) 
            {
                text += arr.charAt(i);
            }
        });
        $(this).val(text);
    });
});

Спасибо всем!

Ответы [ 6 ]

6 голосов
/ 25 июня 2009

Разве это не относится к регулярным выражениям, таким как:

$("input[@type='text'], textarea").change(function() {
    this.value = this.value.replace(/[^\w\d]+/gim,"");
});
1 голос
/ 25 июня 2009

Textarea:

<textarea id="item" name="item" rows="5" cols="80">Some text in here</textarea>

JQuery код:

var text = $('#item').val();
var newtext = "";
for (var i = 0; i < text.length; i++) {
   var c = text.charCodeAt(i);
   if ((c == 0x9) || (c == 0xA) || (c == 0xD) || 
       (c >= 0x20 && c <= 0xD7FF) ||
       (c >= 0xE000 && c <= 0xFFFD)) {
       newtext += c;
   }
}
$('#item').val(newtext);

Это на самом деле очень мало связано с jQuery, methinks, за исключением доступа к текстовым данным и их повторной установки.

1 голос
/ 25 июня 2009

Вы можете использовать метод charCodeAt () в сочетании со свойством length строк для циклического перебора символов в строке.

Что-то вроде:

$("input[type=text], textarea").change(function() {
  var text = $(this).val()

  for(var i = 0; i < text.length; ++i) {
    var currentChar = text.charCodeAt(i);

    // Do something with it...
});

Моя первоначальная версия использовала charAt(), но, похоже, вы имеете дело с кодовыми точками Unicode, charCodeAt() более уместен.

0 голосов
/ 25 июня 2009

Я предпочитаю помешать вводу символа в первую очередь, используя этот тип функции javascript (из моего теневого прошлого):

каждый элемент управления вводом имеет что-то вроде этого: OnKeyPress = 'checkKey (это, "а-Za-z0-9", "N", "10");'

функция выглядит так:

   //****************************************************************************
   // Function: checkKey()
   //   Author: Ron Savage
   //     Date: 10-11-2004 
   //    
   // Description: This function tests reg exp syntax.
   //****************************************************************************
   function checkKey(textControl, reExpr, allCaps, maxlen)
    {
      popupMessage.hide();

      keyStr = String.fromCharCode(event.keyCode);
      textLength = textControl.value.length;

      if (allCaps == 'Y')
         {
         keyStr = keyStr.toUpperCase();
         event.keyCode = keyStr.charCodeAt(0);
         }

      if ( reExpr != '' )
         {
        reString = '[^' + reExpr + ']';
         re = new RegExp(reString, 'g');

         //alert('RE: ' + reString);

         result = keyStr.match(re);

         if (result)
            {
            beep();
            event.returnValue = false;
            showPopupMessage(textControl, result.toString() + ' not allowed!');
            }
         }

      if ( textLength > maxlen )
         {
            beep();
            event.returnValue = false;
            showPopupMessage(textControl, 'Max length [' + maxlen + '] exceeded!');
         }

      //alert('Key: ' + keyStr + ' code: ' + event.keyCode);
      }
0 голосов
/ 25 июня 2009

, чтобы получить значение textarea, попробуйте:

$('input[type=textarea]').change(function(){
   var value = $(this).val(); 
   ...........
});

для удаления нежелательного символа попробуйте этот пример. Я копирую из документации jquery (jQuery.grep ())

var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];
$("div").text(arr.join(", "));

arr = jQuery.grep(arr, function(n, i){
  return (n != 5 && i > 4);
});
$("p").text(arr.join(", "));

arr = jQuery.grep(arr, function (a) { return a != 9; });
$("span").text(arr.join(", "));
0 голосов
/ 25 июня 2009

Используйте наблюдатель событий (onkeydown / onkeypress / onkeyup) на входе / textarea, нажмите клавишу, если клавиша является нежелательным символом, остановите событие.

$("input[type=text], textarea").observe('keypress', function(e) {
 var keynum; 
 if(window.event)
 {
  keynum = e.keyCode
 }
 else if(e.which)
 {
  keynum = e.which
 }
 if(keynum == '13' || keynum == 'something else' || [...])
 {
  Event.stop(e);
 }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...