Jquery:根据相同的输入名称检查重复值

时间:2015-08-05 02:18:43

标签: javascript jquery

我有多个这样的隐藏输入:

<input type="hidden" value="4531" name="product_id">
<input type="hidden" value="4532" name="product_id">
<input type="hidden" value="4533" name="product_id">

如何检查表单提交的值是否重复,我的jquery代码如下(不工作):

$(".btnSubmit").click(function() {
var errorCounterDupInput = 0;
$("input[name='product_id']").each(function (i,el1) {
                var current_val = $(el1).val();
                console.log("current_val : "+current_val);
                if (current_val != "") {
                    $("input[name='product_id']").each(function (i,el2) {
                        if ($(el2).val() == current_val && $(el1).attr("name") != $(el2).attr("name")) {
                            errorCounterDupInput = errorCounterDupInput+1;                            
                        }
                    });
                }
            });
}); 

errorCounterDupInput的输出总是0,即使我有这样的重复项:

<input type="hidden" value="4531" name="product_id">
<input type="hidden" value="4531" name="product_id">
<input type="hidden" value="4531" name="product_id">

任何想法?

3 个答案:

答案 0 :(得分:2)

这里有两个问题。

  1. 您要求名称属性不同,因为它是重复的($(el1).attr("name") != $(el2).attr("name")),并且您已经确保它们与您的jQuery选择器相同。所以不会有重复。
  2. 您正在将每个元素与所有元素进行比较,包括每个元素本身的循环,因此即使您修复了名称错误,您也会获得比实际更多的重复元素。
  3. 我建议在循环遍历元素时,缓存它们的值并仅将新值与现有缓存进行比较,这样您就可以准确了解重复计数。

    $(".btnSubmit").click(function () {
        var errorCounterDupInput = 0;
        var product_ids = [];
        $("input[name='product_id']").each(function (i, el1) {
            var current_val = $(el1).val();
            console.log("current_val : " + current_val);
            if (current_val != "") {
                if(product_ids.indexOf(current_val) === -1){
                    product_ids.push(current_val);
                } else {
                    errorCounterDupInput++;
                }
            }
        });
        console.log(errorCounterDupInput);
    });
    

    小提琴: http://jsfiddle.net/trex005/Lnogg68v/

答案 1 :(得分:0)

建议使用数组方法,您可以检查数组中是否已存在值。不需要复杂的条件,只需要传递一次元素

(Pdb) import myapp.settings
(Pdb) from django.conf import settings
(Pdb) settings.configure(myapp.settings)
(Pdb) from app.models import MyModel
*** AttributeError: 'module' object has no attribute 'DEFAULT_INDEX_TABLESPACE'

答案 2 :(得分:0)

您可能想尝试这个:

$(".btnSubmit").click(function() {
var errorCounterDupInput = 0;
$("input[name='product_id']").each(function (i,el1) {
                var current_val = $(el1).val();
                if (current_val != "") {
                    $("input[name='product_id']").each(function (j,el2) {
                        if ($(el2).val() == current_val && i != j) {
                            errorCounterDupInput = errorCounterDupInput+1;                           

                        }
                    });
                }
            });


console.log(errorCounterDupInput);
}); 

您的代码很好,但只需要稍作修改即可。请参阅以上更改。