2016-12-21 134 views
0

EDIT2:jQuery的验证某些输入必须是彼此不同

我觉得我的解附近。继vicgoyso的建议,我创建了一些对象从我的输入(而不是数组),然后我进行了比较:see the jsfiddle

因为这个比较工作:comparison on jsfiddle我希望上面的代码,以及工作,但事实并非如此。


编辑: jQuery的方法,我正在与此类似:

$().ready(function(){ 
    $.validator.addMethod("same_names", function(value, element) { 
     if (!$('#surname').val() || $('#surname').val() != null 
       && !$('#surname1').val() || $('#surname1').val() != null){ 
      return $('#name').val() != $('#name1').val() 
      && $('#surname').val() != $('#surname1').val() 
      && $('#nickname').val() != $('#nickname1').val() 
     } 

     }, " Your input is equal to another"); 

    $("#myForm").validate({ 
     rules: { 
      name: { 
       required: false, 
       same_names: true 
      }, 
      name1: { 
       required: false, 
       same_names: true 
      }, 
      surname: { 
       required: false, 
       same_names: true 
      }, 
      surname1: { 
       required: false, 
       same_names: true 
      }, 
      nickname: { 
       required: false, 
       same_names: true 
      }, 
      nickname1: { 
       required: false, 
       same_names: true 
      }, 
     }, 
     messages: { 
     ... 
     } 
    }) 
}); 

它继续说名字,姓氏和昵称是必需的,而他们没有。 没有jQuery的我的方法与此类似:

$('#myForm').submit(function (event) { 
    var errors = false; 
    if ($('#name').val() == $('#name1').val() && 
     $('#surname').val() == $('#surname1').val() && 
     $('#nickname').val() == $('#nickname1').val() 
     || 
     $('#name').val() == $('#name2').val() && 
     $('#surname').val() == $('#surname2').val() && 
     $('#nickname').val() == $('#nickname2').val() 
     || 
     $('#name').val() == $('#name3').val() && 
     $('#surname').val() == $('#surname3').val() && 
     $('#nickname').val() == $('#nickname3').val() 
     || 
     $('#name').val() == $('#name4').val() && 
     $('#surname').val() == $('#surname4').val() && 
     $('#nickname').val() == $('#nickname4').val() 
     .... 
     || 
     $('#name').val() == $('#name10').val() && 
     $('#surname').val() == $('#surname10').val() && 
     $('#nickname').val() == $('#nickname10').val() 
     || 
     $('#name1').val() == $('#name2').val() && 
     $('#surname1').val() == $('#surname2').val() && 
     $('#nickname1').val() == $('#nickname2').val() 
     || 
     $('#name1').val() == $('#name3').val() && 
     $('#surname1').val() == $('#surname3').val() && 
     $('#nickname1').val() == $('#nickname3').val() 
     .... and so on 
     ) { 
     $("#error").show(); 
     location.href = "#"; 
       location.href = "#error"; 
      errors = true; 
    } else { 
     errors = false; 
     $("#error").hide(); 
    } 
    if (errors == true) { 
     event.preventDefault(); 
    } 
}); 

(有10个输入组,由名+姓+昵称形成)我实际的JSP与此类似:

<form id="myForm" method="post"> 
<input id="name" name="name" /> 
<input id="surname" name="surname" /> 
<input id="nickname" name="nickname" /> 
    <br/ > 
<input id="name1" name="name1" /> 
<input id="surname1" name="surname1" /> 
<input id="nickname1" name="nickname1" /> 
<br/> 
<input id="name2" name="name2" /> 
<input id="surname2" name="surname2" /> 
<input id="nickname2" name="nickname2" /> 
    <br /> 
<input id="name3" name="name3" /> 
<input id="surname3" name="surname3" /> 
<input id="nickname3" name="nickname3" /> 
    <br /> 
    <br /> 
<input id="submit" type="submit" value="submit" /> 
</form> 

我想是一个错误只是如果此组(姓名,昵称)中的一个与另一个相等,例如,这是一个错误:

  • 约翰
  • 史密斯
  • 王子 *
  • 约翰
  • 史密斯
  • 王子 *
  • 约翰
  • 史密斯
  • 雪人

但是这个人是不是:

  • 约翰
  • 史密斯
  • 王子至少一个场是不同的,因此该输入是细
  • 约翰
  • 史密斯
  • 雪人 *至少一个场是不同的所以输入很好
  • 约翰
  • 史密斯
  • 火球至少一个领域是不同的,因此输入的是精

问题 如果我想使用此代码:
https://stackoverflow.com/a/16965721/4477899

要在这里解决这个问题:
Form validate some input must be different from each other

我在问,因为我已经在使用jQuery验证,如果字段超过两个组,或者是空的(这些字段不是必需的),以前的方法不能很好地工作。

+0

请向我们展示一些迄今为止已经尝试过的代码。一个最小,完整和可验证的例子就足够了。 – wiredolphin

回答

1

对于仅这一部分:

EDIT2:

I feel I'm near the solution. Following the vicgoyso's suggestion I created some object from my inputs (and not arrays), and then I compared them: see the jsfiddle

Since this comparison is working: comparison on jsfiddle I would expect the code above to work as well, but it's not.

你没有包括jQuery的本身的的jsfiddle。

主要它不会工作,因为您的布尔逻辑是倒退。当你找到一场比赛时,你会得到true。但是,您然后从addMethod()方法return true,所以与true你告诉它通过验证。要验证失败,您需要而不是return false

return !duplicateFound; 

最后,为了使字段可选,你需要多一点的逻辑......

return this.optional(element) || !duplicateFound; 

DEMOhttps://jsfiddle.net/awb4tcyy/3/


作为一般请注意,随着您使用更多组字段进行缩放,您的代码将变得非常复杂。我建议你利用某种类型的循环算法。祝你好运。

+0

非常感谢您,我正在研究它以使其适合我的案例 – tina

0

你首先需要定义一个自定义的验证方法:在阵列 https://jqueryvalidation.org/jQuery.validator.addMethod/

jQuery.validator.addMethod("laxEmail", function(value, element) { 
    var duplicateFound = false; 

    //apply input values in array 
    //check for duplicates 
    duplicateFound = true; //update variable if duplicate found 

    return duplicateFound; 
}, 'Input values cannot be identical'); 

在你自定义的验证,获取/存储输入值: jQuery get values from inputs and create an array

然后检查数组的副本,如果发现重复,则返回true: How can I check if the array of objects have duplicate property values?

然后,您添加自定义验证的名称Ñ规则应用到输入验证像这样:

myForm.validate({ 
    rules: { 
    myCustomRule: { 
     required: true 
    } 
    }, 
    messages { 
    myCustomRule: { 
    required: "Input values cannot be identical" 
    } 
    } 
}); 
+0

感谢您的回答,我正在研究如何应用它 – tina

相关问题