2016-12-21 162 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

相關問題