【问题标题】:Change prefix currency symbol on radio selection更改单选上的前缀货币符号
【发布时间】:2016-02-05 03:48:10
【问题描述】:

我需要更改输入文本字段中货币的前缀。所以货币前缀会根据电台而变化。我可以在单击收音机时重置输入字段,但不能更改前缀。

这是我的代码:

 Price (
<label>
  <input type="radio" name="prop_crnt" class="currency" value="0" id="crnt-thb" required>&nbsp;THB</label>
<label>
  <input type="radio" name="prop_crnt" class="currency" value="1" id="crnt-usd">&nbsp;USD</label>):

Javascript:

//reset input on radio clicked
$("input[name='prop_crnt']").on('click', function() {
  $('input.money').val('');
  //change currency prefix
  if ($('#crnt-thb').val()=="0") {
    var crncy="฿";
  }else{
    var crncy="$";
  }
});



var format = function(num) {
  var str = num.toString().replace(crncy, ""),
    parts = false,
    output = [],
    i = 1,
    formatted = null;
  if (str.indexOf(".") > 0) {
    parts = str.split(".");
    str = parts[0];
  }
  str = str.split("").reverse();
  for (var j = 0, len = str.length; j < len; j++) {
    if (str[j] != ",") {
      output.push(str[j]);
      if (i % 3 == 0 && j < (len - 1)) {
        output.push(",");
      }
      i++;
    }
  }
  formatted = output.reverse().join("");
  return (crncy + formatted + ((parts) ? "." + parts[1].substr(0, 2) : ""));
};
//currency
$(".money").keyup(function(e) {
  $(this).val(format($(this).val()));
});

这里是 jfiddle:https://jsfiddle.net/u0rc9trh/2/

【问题讨论】:

  • crncy 未在格式函数中定义。也许您的意思是让它成为全球性的?
  • 这种情况if ($('#crnt-thb').val()=="0") 不会一直为真吗?您需要测试是否选中了该单选按钮,而不是它的值。或者使用this 测试被点击单选的值。
  • ^^^^ 和另一个问题。检查Demo
  • Tushar,为什么有时候里面是undefined
  • 那是我的代码吗?哈哈,没想到还在用;无论哪种方式,看看我原来的答案,你可以使用一个简单的 if/else 来检查货币:stackoverflow.com/questions/23966148/…

标签: javascript jquery


【解决方案1】:

这样的东西应该是您正在寻找的东西,尽管它是为您的需要而编写的,所以可能会添加一些变量或其他东西。无论如何,这应该可以:

var format = function(num){
    var cur = $('#crnt-thb').is(":checked") ? "฿" : "$", str = num.toString().replace("฿", "").replace("$", ""), parts = false, output = [], i = 1, formatted = null;
    if(str.indexOf(".") > 0) {
        parts = str.split(".");
        str = parts[0];
    }
    str = str.split("").reverse();
    for(var j = 0, len = str.length; j < len; j++) {
        if(str[j] != ",") {
            output.push(str[j]);
            if(i%3 == 0 && j < (len - 1)) {
                output.push(",");
            }
            i++;
        }
    }
    formatted = output.reverse().join("").toString();
    return(cur + formatted + ((parts) ? "." + parts[1].substr(0, 2) : ""));
};
//currency
$(".money").keyup(function(e) {
    $(this).val(format($(this).val()));
});
$("input[name='prop_crnt']").on('click', function(){
    $(".money").keyup();
});

至于双重replace(),如果您想简化事情,请查看this answer。另外,a fiddle for you to test

附: 感谢您使用我的代码,我编写它是为了帮助人们,我很高兴它仍然是。干杯!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多