向字符串(输入框)添加字符

3
我有一个文本框,其中的值是在jQuery中进行计算后得出的结果。我想使用jQuery,在文本框中显示括号,如果数字为负数的话。
由于数字可能会在稍后再次使用,因此我需要删除括号,以便进行进一步的计算。
你有什么想法如何实现这个功能?
谢谢
Zaps
3个回答

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
首先,将您的计算结果存储在一个变量中。在大多数情况下,您不应该使用DOM来存储数据。这基本上可以消除您的问题。
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.

如果您真的想将数据存储为文本输入的 .value,则也可以创建一个 unbracketed 函数:
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

假设您可能有多个字段(而且不希望出现负号):

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

然后当您再次获取该值时,只需去掉括号并乘以-1即可使其变为负数。

编辑:

您还可以使用jQuery('input').data()来存储原始数字,这样您就不必再次解析它。(阅读更多:http://api.jquery.com/data/)


你可以使用.change代替.each,以便实时发生变化。但是,您可能需要一些代码来处理括号内的任何数字。 - Gert Grenander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接