【问题标题】:Updating span is ok, updating input results in 'NaN'更新跨度没问题,更新输入结果为“NaN”
【发布时间】:2011-12-11 20:50:32
【问题描述】:

我正在使用 jquery 和一个从 Yahoo! 获取最新汇率的 php 脚本转换价格!

我的更新函数正在处理我可以使用 .text() 更新的元素(例如 span 元素),但是一旦我尝试设置输入元素的 .val(),它就会简单地收到“NaN” - 甚至虽然我对两者使用相同的值。

function frmtCurrency(ele,price) {
    // round the currency to the nearest .05
    price *= 2.0;
    price = price.toFixed(1) / 2.0;
    price = price.toFixed(2);

    //alert (parseInt(price)) here returns the amount, so it IS a number

    // check what type of element 'ele' is
    var element = (ele.get(0).tagName);

    if (element != 'INPUT') {
        ele.text(price+code); ALWAYS OK eg 10.55
    } else {
        ele.val(price); // ALWAYS NaN
    }
};

谁能告诉我为什么我不能更新输入字段,但我可以更新 span 元素

【问题讨论】:

  • 建议你做 parseInt(price, 10);作为函数的第一行,在您尝试对其进行数学运算之前
  • 我同意邓肯的观点。价格在某些时候可能是一个字符串 (NaN)。 toFixed() 可以使它成为一个字符串.. 可以在设置 val 之前说 price = parseInt(price)
  • 请创建一个jsfiddle.net 演示。
  • 他正在尝试使用浮点数,所以他应该使用parseFloat(price).toFixed(2)

标签: javascript jquery nan


【解决方案1】:
function frmtCurrency(ele,price) {
    // round the currency to the nearest .05
    price = parseFloat(price);
    if(isNaN(price)) { price = 0 }
    price *= 2.0;
    price = price.toFixed(1) / 2.0;
    price = price.toFixed(2);
    ele.val(price);
}

frmtCurrency($('input'), '');

很可能您在软件中的某个时刻传递了一个字符串或某些错误,从而给您一个 NaN。在这里您可以看到我传递了一个空字符串,并添加了一个句柄以使其在没有给出实数时显示为 0.00。

http://jsfiddle.net/kuroir/DaHSA/1/

【讨论】:

  • 我在这里做了一些非常愚蠢的事情,这造成了我几乎不好意思承认的问题......我正在查看目标元素并相应地处理它,但不是在那个元素首先提供价值。所以我依靠 .text() 将值交给我,这当然适用于跨度,但不适用于输入字段。检查输入类型并相应地请求值使其一切正常。感谢所有建议解决此问题的人,我保证不再那么愚蠢:)
  • 呵呵,我以前也遇到过这种事。别担心。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多