使用javascript按类查找表单元素中的重复值
我试图使用javascript根据类在表单元素(输入框和选择下拉列表)中查找重复值。这就是我所拥有的,但它不起作用。有更好的方法吗?我是javascript新手,在另一篇文章中将其视为解决方案 EDIT:只调用内部函数。如果我打断他们,他们就会被叫来。为什么会这样?使用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
<%@ 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。