【发布时间】:2011-06-13 02:18:49
【问题描述】:
我正在制作一个表单,并且希望代码仅在输入值是数字时才执行。我试图避免使用某种验证插件,并且想知道是否有一种方法可以遍历输入字段并检查值。
我一直在尝试以下方法,但我认为我的逻辑是错误的:
(#monthlyincome 是表单 ID)
$("#submit").click(function() {
$("#monthlyincome input").each(function() {
if (!isNaN(this.value)) {
// process stuff here
}
});
});
有什么想法吗?
这是整个更新的代码:
$("#submit").click(function() {
$("#monthlyincome input[type=text]").each(function() {
if (!isNaN(this.value)) {
// processing data
var age = parseInt($("#age").val());
var startingage = parseInt($("#startingage").val());
if (startingage - age > 0) {
$("#field1").val(startingage - age);
$("#field3").val($("#field1").val());
var inflationyrs = parseInt($("#field3").val());
var inflationprc = $("#field4").val() / 100;
var inflationfactor = Math.pow(1 + inflationprc, inflationyrs);
$("#field5").val(inflationfactor.toFixed(2));
var estyearlyinc = $("#field6").val();
var inflatedyearlyinc = inflationfactor * estyearlyinc;
$("#field7").val(FormatNumberBy3(inflatedyearlyinc.toFixed(0), ",", "."));
var estincyears = $("#field2").val();
var esttotalinc = estincyears * inflatedyearlyinc;
$("#field8").val(FormatNumberBy3(esttotalinc.toFixed(0), ",", "."));
var investmentrate = $("#field9").val() / 100;
var investmentfactor = Math.pow(1 + investmentrate, inflationyrs);
$("#field10").val(investmentfactor.toFixed(2));
var currentsavings = $("#field11").val();
var futuresavings = currentsavings * investmentfactor;
$("#field12").val(FormatNumberBy3(futuresavings.toFixed(0), ",", "."));
//final calculations
var futurevalue = (1 * (Math.pow(1 + investmentrate, inflationyrs) - 1) / investmentrate);
var finalvalue = (1 / futurevalue * (esttotalinc - futuresavings));
$("#field13").val(FormatNumberBy3(finalvalue.toFixed(0), ",", "."));
}
// end processing
}
});
});
FormatNumberBy3 是一个用于...格式化数字的函数。 :)
【问题讨论】:
-
没有检查这个,但它突然出现在我的脑海里。如果你在所有输入元素上执行each(),那很可能也包括提交按钮,所以它会检查提交的值,如果不是数字则失败。尚未对此进行测试,但似乎合乎逻辑;)那里的代码也没有正确关闭,但这可能只是复制+粘贴错误。
-
@Sondre,我也这么认为,但他可以(也应该)使用
<button>来解决这个问题。 -
@Sondre:我一直在尝试使用具有相同(否定)结果的类(仅对应于几个输入字段)。关闭确实是复制粘贴错误。 :P @Box9:我实际上并没有使用按钮,但即使我使用 $(".classname").each(),它仍然无法工作。
-
@Box9 是的,使用任何其他类型的元素提交应该可以解决它。或者针对特定的输入类型,例如 input[type=text],因为它很可能只是您想要检查的文本字段。对单选按钮进行检查没有多大意义;)
-
@Alex Berg 好的,您可以对此进行测试,也许您可以根据自己的情况调整此功能。 pastebin.com/UajaEc2e 是我对您表格的简单检查的建议。希望这可以对伴侣有所帮助:) 将您的表单分成两个表单,其中一个是可以填写的字段,而另一个是似乎粘贴结果的只读部分。这是为了避免表单验证尝试触摸只读部分,据我所知,不需要验证,因为它是从您的计算中提供的数据,应该在那里设置。