尝试使用toPrecision时,toPrecision不是一个函数

时间:2014-11-21 21:04:05

标签: javascript jquery

我错过了什么?

错误

TypeError: $(...).val(...).toPrecision is not a function

代码

$('.value_psi').val(
    convert(Number($('.value_psi').val()), "psi", "bar")
 ).toPrecision(4);

更新

转换返回:

return val * conv[from] / conv[to];

解决方案想法

因此解决方案基本上是将一个括号移到右边!

4 个答案:

答案 0 :(得分:3)

当这样使用时,val方法返回一个jQuery对象。 toPrecision方法是Number对象上的方法,而不是jQuery方法。

尝试在jQuery对象上访问它将返回undefined,然后尝试将其用作函数会给出错误消息。

要格式化val方法中使用的数字,您可以对调用内的值使用toPrecision,而不是调用返回值:

$('.value_psi').val(
  convert(Number($('.value_psi').val()), "psi", "bar").toPrecision(4)
);

答案 1 :(得分:2)

在这里,您使用.val()作为setter方法,并自行返回input jQuery对象。因此,您无法对此toPrecision()进行申请。 toPrecision已应用于Number对象。

您需要在toPrecision返回的值上应用convert()

$('.value_psi').val(convert(Number($('.value_psi').val()), "psi", "bar").toPrecision(4));

答案 2 :(得分:1)

当您使用.val()作为setter方法时,它返回jQuery对象,而不是值。这就是错误的原因。

但如果" value_psi"有多个输入?上课时,还有另外一个问题。当您使用.val()作为setter方法时,它会设置所有元素的值,但是当您使用.val()作为getter方法时,它会获取第一个元素的值。这意味着其他答案中的代码将使用第一个输入的值设置所有输入。

要解决此问题,您可以使用带有函数的.val()方法的版本。该函数针对jQuery对象中的每个输入执行。函数的第二个参数是输入的当前值。 (第一个参数是索引。)该函数应返回输入的新值。

$('.value_psi').val(function(i, value) {
    return convert(Number(value), "psi", "bar").toPrecision(4);
});

答案 3 :(得分:1)

在这种模式下出错give=give.toPrecision(4);

解决方案: 尝试以这种模式做 give=Number(give.toPrecision(4));

希望它能起作用...!