我错过了什么?
错误
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];
解决方案想法
因此解决方案基本上是将一个括号移到右边!
答案 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));
希望它能起作用...!