JQuery:检查输入值

时间:2010-06-26 23:47:56

标签: javascript jquery

如何检查输入字段中输入的数字是否高于我的“min”字段中的值?

            <tr>
                <td>Steeeeaak</td>
                <td><input type="hidden" name="amount_5_min" value="10"/>
                <input type="text" name="amount_5" size="4" value="10"/></td>
                <td>-</td>
                <td><a href="/item/delete/eventId/2/hash/a8b5dzp9rks7164wh30j2anqh13w/itemId/5">Verwijder</a> </td>
            </tr>

正如您所看到的,这两个字段的名称的第一部分是相同的...这里有任何可能吗?我在表格的末尾做了提交,所以我想我必须在提交时做点什么吗?

THX!

4 个答案:

答案 0 :(得分:2)

var fieldname = "amount_5";
var val1 = parseInt($("input[name="+field_name+"_min]").val(),10);
var val2 = parseInt($("input[name="+field_name+"]").val(),10);
// Compare the values

并绑定到表单的提交操作

$("form#your_form_id_here").submit(function() {
    // Use above code
});

修改 凯文提出了一个很好的观点

编辑2 更新了任何输入名称

答案 1 :(得分:2)

我猜你发布的标记有很多行,购物车样式。在这种情况下,这是循环检查提交金额的所有行的方法,只需提供您的表单/表格ID以匹配您的选择器:

$("#myForm").submit(function() {
  var valid = true;
  $("#myTable tr td input[name^='amount_']:last-child").each(function() {
    var val = parseInt(this.value, 10); //this value
    var min_val = parseInt($(this).siblings().val(), 10); //min_value
    if(val < min_val) {
      valid = false;
      alert($(this).closest('tr').children(':first').text() + //"Steeeeaak"
            " doesn't meet the minimum required value: " + min_val);
    }
  });
  return valid; //submit aborts if any didn't meet min value
});

此函数使用<input>元素作为兄弟姐妹,按特定顺序在同一<td>内,只使用已知的HTML结构,这对您有利。

答案 2 :(得分:1)

我会把这个放在那里只是为了好玩(部分是因为我今天刚刚了解了~~)。

试一试: http://jsfiddle.net/694dB/

它假设输入是行中唯一的两个(或至少前两个)。

$('#myform').submit(function() {
    var $inputs = $(this).find('input[name^=amount]');

    var values = $inputs.map(function() {
        return this.value;
    }).get();

       // If it is less than the minimum, add a class,
       //    and return false to stop the submit
    if(~~values[1] < ~~values[0]) {
        $inputs.closest('tr').addClass("someNewClassName");
        return false;
    }
});

根据您的评论更新。请注意,这对一个行有效。要对多行执行相同的操作,您需要使用回答中提供的 @Nick 等循环。

关于双位运算符的文章:

http://james.padolsey.com/javascript/double-bitwise-not/

答案 3 :(得分:0)

在这种情况下,请使用以下内容:

var elms = document.getElementsByTagName("input"); //get all input tags
var texts;
var minlengths;
for (input in elms) {
    var value = input.value; //'with' statement is evil
    if (input.type == "text") {
        texts.push(value);
    } else if (input.type == "hidden") {
        minlengths[value.substring(0, value.lastIndexOf("_"))] = value; //set what the field 'checks' = the minimum length
    }
}
for (text in texts) { //go back through the texts because the inputs might not be right after the texts
    var minlength = minlengths[text];
    var textnum = parseInt(text.value, 10);
    if (textnum === NaN || textnum > minlength) {
        alert("One of the fields is greater than the minimum length.");
    }
}

注意:此代码未经测试,可能无效。那里某处可能存在“一个接一个”的错误。

编辑:在任何情况下,您都必须执行此服务器端,因为用户可能会篡改请求。 (永远不要相信用户) 您是否有任何特定原因可以不在文本输入字段中使用minlength属性?