2009-06-25 7 views
3

Je voudrais savoir comment supprimer certains caractères d'une zone de texte (ou d'une zone de texte) avec JQuery. J'ai le code en C# mais je ne peux pas le traduire en JQuery javascript. Mon problème est que je ne sais pas comment obtenir la valeur d'une zone de texte en tant que tableau de caractères que je peux ensuite parcourir et comparer par rapport à un ensemble donné de caractères indésirables. Voici comment "bien" Je suis venu dans JQuery:Suppression des caractères indésirables de la zone de texte avec JQuery

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

    // code here 

}); 

Ceci est mon code en 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) ; 

MISE À JOUR:

Je suis allé avec une combinaison de quelques réponses ci-dessous (je vais upvote eux) et mon final JQuery ressemble à ceci et fonctionne:

$(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); 
    }); 
}); 

Merci à tous!

+0

validation xml sur cette base? Je peux seulement supposer que ce n'est pas supposé être utf-8 (qui peut avoir jusqu'à 6 octets par caractère) –

+0

validant xml ... ?? Je suppose que vous faites référence à ma variable C# _validXml ... qui n'a vraiment rien à voir avec ce que j'essaie de faire sur le client. –

Répondre

1

Textarea:

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

Code 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); 

Cela a en fait très peu à voir avec jQuery, methinks, sauf pour accéder aux données de texte et mettez-le à nouveau.

+0

Même si cela avait le moins à voir avec JQuery c'est ce qui a résolu mon problème. –

1

Vous pouvez utiliser la méthode charCodeAt() combinée à la propriété length des chaînes pour faire défiler les caractères de la chaîne.

Quelque chose comme:

$("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... 
}); 

Ma première version utilisée charAt(), mais comme il semble que vous traitez avec des points de code Unicode, charCodeAt() est plus approprié.

+0

(+1) Merci, m'a mis sur la bonne voie ... –

-1

Utilisez un observateur d'événement (onkeydown/onkeypress/onkeyup) sur l'entrée/textarea, appuyez sur la touche, si la clé est un caractère indésirable, arrêtez l'événement.

$("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); 
} 
}); 
+3

Très agréable, mais ne gère pas le cas lorsque le texte est collé. – razzed

+0

Yepp et c'est ce que j'essaie de valider réellement –

+0

Pour moi 'Event.stop (e)' n'a pas fonctionné. 'e.preventDefault()' a fait le travail. – Episodex

-1

pour obtenir la valeur d'essayer textarea:

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

pour supprimer le caractère non désiré essayer cet exemple .. je copie de la documentation 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(", ")); 
-1

je préfère arrêter le personnage de se faire est entré en premier lieu, en utilisant ce type de fonction javascript (de mon passé louche): a quelque chose comme

chaque contrôle d'entrée ce sur: onkeypress = 'checkKey (ceci, "a-zA-Z0-9", "N", "10"); '

la fonction ressemble:

//**************************************************************************** 
    // 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); 
     } 
6

would't ce soit le cas pour les expressions régulières, comme:

$("input[@type='text'], textarea").change(function() { 
    this.value = this.value.replace(/[^\w\d]+/gim,""); 
}); 
+0

Vous manquez un espace là-dedans ... mais c'est la meilleure solution imho. – Evgeny

+0

Probablement plus rapide et tel mais je veux que mon code ait du sens ici donc je ne vais pas avec regex ... au moins pas cette fois mais merci quand même. –

Questions connexes