2010-06-13 10 views
3

J'ai une zone de texte où la valeur est le résultat d'un calcul effectué dans jQuery. Ce que je voudrais faire, en utilisant jQuery, est d'afficher des parenthèses autour du nombre dans la zone de texte si le nombre est négatif.Ajout de caractères à une chaîne (champ de saisie)

Le numéro peut être utilisé plus tard, donc je devrais alors enlever les crochets afin que d'autres calculs puissent être effectués.

Des idées sur la façon dont je pourrais implémenter cela?

Merci

Zaps

Répondre

2
function FormatTextBox(id) { 
    var txtBox = $(id).val(); 
    //strip bracket to get the number only 
    txtBox = txtBox.replace("[", "").replace("]", ""); 
    var val = parseFloat(txtBox); 

    if (val < 0) { 
    txtBox.val("[" + val + "]"); 
    } else { 
    txtBox.val(val); 
    } 
    return val; 
} 
1

En premier lieu, stocker votre calcul dans une variable. Vous ne devriez pas utiliser le DOM pour stocker des données (dans la plupart des cas). Cela élimine fondamentalement votre problème.

Number.prototype.bracketed = function() { 
    if(this < 0) { 
     return '[' + -this + ']'; 
    } else { 
     return '' + this; 
    } 
}; 

var result = do_calculation(); 

myTextBox.value = result.bracketed(); 

// result still holds the original Number value. 

Si vous vraiment voulez stocker les données que l'.value de la saisie de texte, vous pouvez faire une fonction unbracketed ainsi:

String.prototype.unbracketed = function() { 
    var parts = this.match(/^\[([0-9]+)\]$|^([0-9]+)$/); // [number] or number 

    if(parts[1]) { // [number] 
     return -parseInt(parts[1], 10); 
    } 

    if(parts[2]) { // number 
     return parseInt(parts[2], 10); 
    } 

    return NaN; 
}; 
0

En supposant que vous pourriez avoir plusieurs champs (et vous ne voulez pas le signe négatif):

jQuery('input').each(function(){ 
     if(jQuery(this).val() < 0){ 
      jQuery(this).val('['+-1*jQuery(this).val()+']'); 
     } 
    } 
) 

Ensuite, lorsque vous récupérez la valeur, il suffit de supprimer les parenthèses et de multiplier par -1 pour la rendre négative.

EDIT:

Vous pouvez également utiliser jQuery (« input ») des données() pour enregistrer le numéro d'origine de sorte que vous ne devez pas l'analyser à nouveau.. (lire la suite: http://api.jquery.com/data/)

+0

Au lieu de .each, vous pouvez utiliser .change pour que cela se fasse à la volée. Mais là encore, vous aurez probablement besoin de code pour rendre compte des nombres entre parenthèses. –

Questions connexes