【问题标题】:JS Input text convert value to integer/number/numeric for comparisonJS输入文本将值转换为整数/数字/数字进行比较
【发布时间】:2016-06-28 17:51:11
【问题描述】:

不能以任何方式将输入文本的值转换为数字!已经尝试过 JS Number(input.val()) 也 parseInt(input.val(),10) 以及一元 +input.val() ...如果小于或等于,我需要通过条件语句比较输入。

有人问,我需要输入字段为文本类型,因为我使用插件 jquery 旋钮。我知道输入类型号。

非常感谢任何提醒......不可能没有办法强制进行这种转换。

** 更新 ** Myabe 我忘了补充,我已经读过但仍然不明白为什么,我正在迭代具有相同类的输入,然后使用 this.val(),作为修复我已经阅读了一个元素必须是用它的#id 调用。在我的情况下不能这样做。 fiddle here

 $('.hello').each(function () {
  var temp = $(this).val();
  console.log(+temp + "  , " + parseInt(temp, 10) + "   , " + temp +"    , "+Number(temp)+"   ,"+$(this).val());
 if (!$(this).val() <= 1) {
   $(this).val(--temp).trigger('change');
 }

});

【问题讨论】:

  • “不能以任何方式将输入文本的值转换为数字!”你已经知道这么多......
  • 你能提供一些代码吗?您在哪里遇到问题?
  • 对,给我们看看代码,只要看看你的描述,它应该可以正常工作
  • 您必须将从使用的转换方法返回的值存储到变量中。从输入元素 (type=text) 检索的值始终是字符串,不能“就地”转换。
  • 如果 input 是 DOM input 元素,请注意它没有 val() 方法。它有一个value 属性。在它前面加上一个+,它将被转换为一个数字:+input.value。使用 jQuery:+$(input).val().

标签: javascript jquery string integer


【解决方案1】:

您提供的小提琴有这个if 条件:

 var temp = $(this).val();
 if (!$(this).val() <= 1) {
     $(this).val(--temp).trigger('change');
 }

事实上,输入中的值被这段代码递减。但这几乎是“偶然”的结果。

if 条件存在一些问题:

  1. val() 的结果是一个字符串,而您似乎期望的是一个数字。您可以通过在前面加上 + 将其转换为一个数字。尽管您在 console.log 中执行此操作,但您根本没有使用该结果。
  2. 否定 (!) 仅适用于值,而不适用于整个 &lt;= 表达式,因为 ! 优先于 &lt;=。因此,您应该使用方括号为&lt;= 提供优先级,或者您应该使用&gt;,而不使用! 运算符。

这里是相同的代码更正:

 var temp = +$(this).val();
 if (temp > 1) {
     $(this).val(--temp).trigger('change');
 }

代码的效果是一样的:所有值都递减,因为你输入的值都大于1(20、30、40、50)。

Corrected fiddle

【讨论】:

  • 了解更多信息永远不会迟到:) 感谢您提供详细信息,知道用圆括号括起来以获得优先权,但认为在这种情况下不需要它。再次感谢。
【解决方案2】:

你在使用 Jquery 吗?您不需要显式转换:

if($("#inp").val() > 5){
alert("Greater than 5");
}else{
alert("Less than 5");
}

【讨论】:

  • 我正在使用 jquery ,是的,但我的问题是使用相同的类和使用 $(this).val() 的输入进行迭代。已阅读有关切换到仅使用 id 的信息,应该可以立即修复它,但我不能,因为在稍后阶段我将动态生成输入;
猜你喜欢
  • 2012-11-20
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多