使用javascript按类查找表单元素中的重复值

使用javascript按类查找表单元素中的重复值,javascript,jquery,validation,Javascript,Jquery,Validation,我试图使用javascript根据类在表单元素(输入框和选择下拉列表)中查找重复值。这就是我所拥有的,但它不起作用。有更好的方法吗?我是javascript新手,在另一篇文章中将其视为解决方案 EDIT:只调用内部函数。如果我打断他们,他们就会被叫来。为什么会这样? <%@ taglib prefix="s" uri="/struts-tags"%> <s:include value="Header.jsp"> <s:param name="pageScr

我试图使用javascript根据类在表单元素(输入框和选择下拉列表)中查找重复值。这就是我所拥有的,但它不起作用。有更好的方法吗?我是javascript新手,在另一篇文章中将其视为解决方案

EDIT:只调用内部函数。如果我打断他们,他们就会被叫来。为什么会这样?

    <%@ taglib prefix="s" uri="/struts-tags"%>

<s:include value="Header.jsp">
<s:param name="pageScript">
        <script type="text/javascript">

    function checkForDuplicates() {
              var hasDuplicates = false;
                  $('.class_name').each(function () {
                      var inputsWithSameValue = $(this).val();
                      hasDuplicates = $('.class_name').not(this).filter(function () {
                              return $(this).val() === inputsWithSameValue;
                      }).length > 0;
                      if (hasDuplicates){
                      alert("cannot have duplicates")
                  }
                  });

          }

        </script>
    </s:param>
</s:include>

<div id="container-content">
    <div id="content">
        <s:form action="someAction" theme="simple" method="get" id="theForm">

                        <s:textfield theme="simple" class="class_name"/>

                        <s:textfield theme="simple" class="class_name" />

                        <s:select headerKey="" headerValue="Select Value" 
                        list="values" listKey="value" class="class_name" size="1"/>

            <s:submit action="" value="Save" onclick="return checkForDuplicates()"/>

        </s:form>

        <%-- end content --%>
    </div>
    <%-- end container-content --%>
</div>

<s:include value="Footer.jsp" />

函数checkForDuplicates(){
var hasDuplicates=false;
$('.class_name')。每个(函数(){
var inputsWithSameValue=$(this.val();
hasDuplicates=$('.class_name')。不是(这个)。过滤器(函数(){
返回$(this).val()==inputsWithSameValue;
}).长度>0;
如果(有重复项){
警报(“不能有重复项”)
}
});
}
我正在进口这些:

<script src="scripts/jquery-1.4-min.js"></script>
<script src="scripts/jquery.maskedinput.min.js" type="text/javascript"></script>
<script src="scripts/jquery.supertextarea.min.js" type="text/javascript"></script>

有什么问题?我在.each之后的第一个innerfunction中放置了一个断点,但它从未进入其中


谢谢

您可以让您的功能变得更好,在第一个循环中,您不需要在所有元素上循环

只需将所有输入值存储到一个数组中,然后使该数组的值唯一,并比较它们的长度

//使数组值唯一的函数
// http://stackoverflow.com/a/840849/3971911
函数消除复制(arr){
var i,
len=arr.长度,
out=[],
obj={};

对于(i=0;i这是基于ROX的答案,但是,我认为我们可以检查下一个元素的输入是否在数组中,而不需要第二个函数

function checkDuplicates() {
  // get all input elements
  var $elems = $('.class_name');

  // we store the inputs value inside this array
  var values = [];
  // return this
  var isDuplicated = false;
  // loop through elements
  $elems.each(function () {
    //If value is empty then move to the next iteration.
    if(!this.value) return true;
    //If the stored array has this value, break from the each method
    if(values.indexOf(this.value) !== -1) {
       isDuplicated = true;
       return false;
     }
    // store the value
    values.push(this.value);
  });   
return isDuplicated;     
}
您可能希望检查代码中的某个地方的输入是否为空,但这取决于您自己


编辑:

是否调用了
checkForDuplicates
?是否有其
class='classu name'
的元素?@ray我有一个通过“onclick”调用它的提交按钮,并且有一个带有“class\u name”的元素。之所以调用它,是因为“var haddicates=false”上的断点正在被击中,但除此之外什么都没有。这种代码太糟糕了。人们怎么会喜欢这样的混乱局面呢?@user19252009那么请帮助提建议?我们可以看看你的html吗?好主意。我想你输入了一个错别字:
===
应该是
!==
你还应该检查空值,不要将它们存储在数组中。@Izumi Yanaro$elems的大小始终为零,即使我的字段标记为“class=class\u name”..我不明白为什么是我的错,它应该是!==,我认为检查值是否为空是个好主意,我最初认为OP应该在运行此函数之前先检查值是否为空。@Seephor它对我来说工作正常,请参阅我更新的函数,它与空$elems无关,但是,您尝试过内部/外部吗按钮的所有事件监听器,就像我在JSFIDLE中所做的一样?我个人不喜欢内联事件监听器,JSFIDLE不允许我使用内联onclick。