2013-02-28 8 views
7

मैं अपने फॉर्म को प्रमाणित करना चाहता हूं ताकि दो रिक्त फ़ील्ड में से कम से कम एक फ़ील्ड भर जाए और दो फ़ील्ड भी हो जाएं भर ग्या; लेकिन किसी भी क्षेत्र को खाली नहीं छोड़ सकते हैं।jQuery रिकिडेट, दो रिक्त फ़ील्ड में से कम से कम एक फ़ील्ड भरना चाहिए या

मैं jquery-1.9.1-min.js का उपयोग कर रहा हूं और यहां मेरा HTML पृष्ठ है।

<form action="#" class="send_form" id="forgot_pass_form" method="POST"> 
      <fieldset> 
       <div class="send_row"> 
        <label class="padding-top10">Email</label> 
        <input type="text" class="send_email" id="email" name="email" /> 
        <em>You need to type an email address</em> 
       </div> 

       <div class="send_row option">OR</div> 

       <div class="send_row"> 
        <label class="padding-top10">Username</label> 
        <input type="text" class="send_username" id="uname" name="uname" /> 
       </div> 


       <div class="send_row send_submitforgotuser"> 
        <input type="submit" value="Submit" /> 
       </div> 
      </fieldset> 
      </form> 

कोई सुझाव यह कैसे करें ....?

sofar मैं

jQuery.validator.addMethod("require_from_group", function(value, element, options) { 
    alert("xxx"); 
    var valid = $(options[1], element.form).filter(function() { 
     return $(this).val(); 
    }).length >= options[0]; 

    if(!$(element).data('reval')) { 
     var fields = $(options[1], element.form); 
     fields.data('reval', true).valid(); 
     fields.data('reval', false); 
    } 
    return valid; 
}, jQuery.format("'Please enter either username/ email address to recover password'/Please fill out at least {0} of these fields.")); 

की कोशिश की है फिर भी friutful उत्पादन नहीं मिल रहा है।

+0

क्या आपने jQuery सत्यापन प्लगइन शामिल किया है? चूंकि आप 'validator.addMethod()' का उपयोग कर रहे हैं, इसके लिए यह आवश्यक है कि jQuery सत्यापन प्लगइन को शामिल किया जाए और ठीक से कॉन्फ़िगर किया गया हो। – Sparky

+0

कृपया डुप्लिकेट प्रश्न पोस्ट करके SO का दुरुपयोग न करें: [jquery-1.9.1.min] में दो फ़ील्ड में से किसी एक को सत्यापित करें (http://stackoverflow.com/questions/15134832/validatein-terms -ब्लैंक-फील्ड-किसी भी एक-आउट-ऑफ-टू-फ़ील्ड-इन-जेक्वायरी -1-9-1-मिनट) – Sparky

उत्तर

17

आप validator.addMethod का उपयोग करने का प्रयास कर रहे हैं जो the jQuery Validate plugin का हिस्सा है। यदि आप पहले से नहीं हैं तो आपको इस कोड को अपने कोड में शामिल करना होगा।

फिर require_from_group नियम का उपयोग करें जो पहले से ही the Validate plugin's additional-methods.js file का हिस्सा है। (additional-methods.js फ़ाइल बहुत शामिल करने के लिए मत भूलना।)

rules: { 
    myfieldname: { 
     require_from_group: [1, ".class"] 
    } 
} 
  • पहले पैरामीटर मदों की संख्या की आवश्यकता हो रहा है।
  • दूसरा पैरामीटर class आपके समूह में सभी तत्वों को सौंपा गया है। मैंने आपके दो इनपुट तत्वों में send कक्षा जोड़ा।

  • दो संदेशों को एक में समेकित करने के लिए the groups option का भी उपयोग करें।

jQuery:

$(document).ready(function() { 

    $('#forgot_pass_form').validate({ // initialize the plugin 
     groups: { // consolidate messages into one 
      names: "uname email" 
     }, 
     rules: { 
      uname: { 
       require_from_group: [1, ".send"] 
      }, 
      email: { 
       require_from_group: [1, ".send"] 
      } 
     } 
    }); 

    // for your custom message 
    jQuery.extend(jQuery.validator.messages, { 
     require_from_group: jQuery.format("'Please enter either username/ email address to recover password'/Please fill out at least {0} of these fields.") 
    }); 

}); 

कार्य डेमो: http://jsfiddle.net/sgmvY/1/


संपादित: require_from_group विधि के साथ As per Github, there is an open issue। जब तक यह तय नहीं हो जाता है, डेवलपर नीचे इस समाधान की सिफारिश कर रहा है। चूंकि आप मैन्युअल रूप से संशोधित विधि को अपने कोड में जोड़ देंगे, इसलिए additional-methods.js फ़ाइल को शामिल करने की आवश्यकता नहीं है।

नए कार्य डेमो: http://jsfiddle.net/kE7DR/2/

$(document).ready(function() { 

    jQuery.validator.addMethod("require_from_group", function (value, element, options) { 
     var numberRequired = options[0]; 
     var selector = options[1]; 
     var fields = $(selector, element.form); 
     var filled_fields = fields.filter(function() { 
      // it's more clear to compare with empty string 
      return $(this).val() != ""; 
     }); 
     var empty_fields = fields.not(filled_fields); 
     // we will mark only first empty field as invalid 
     if (filled_fields.length < numberRequired && empty_fields[0] == element) { 
      return false; 
     } 
     return true; 
     // {0} below is the 0th item in the options field 
    }, jQuery.format("'Please enter either username/ email address to recover password'/Please fill out at least {0} of these fields.")); 

    $('#forgot_pass_form').validate({ // initialize the plugin 
     groups: { 
      names: "uname email" 
     }, 
     rules: { 
      uname: { 
       require_from_group: [1, ".send"] 
      }, 
      email: { 
       require_from_group: [1, ".send"] 
      } 
     } 
    }); 



}); 
+0

देर से प्रतिक्रिया के लिए खेद है .... आपके उत्तर के लिए धन्यवाद। एक बात: क्या मैं कर सकता हूं इसे एक फ़ंक्शन के रूप में लिखें, फिर इसे एक jquery सत्यापन में बुलाया जाएगा। 1> फ़ंक्शन validateUser() फिर 2> $ (दस्तावेज़) के अंदर .ready (function() {// validateuser();} – bigZero

+0

@bigZero, 'validate() 'केवल प्लगइन प्रारंभ होता है। वास्तव में कोई नहीं है इसे किसी अन्य फ़ंक्शन के अंदर डालने में इंगित करें। यदि आप किसी फ़ंक्शन के अंदर अपने फॉर्म की वैधता _ को देखना चाहते हैं, तो बस [वैध ') (] http://docs.jquery.com/Plugins/Validation/valid) का उपयोग करें प्लगइन प्रारंभ करने के बाद। – Sparky

0

@Sparky मैं एक खाता नाम और/या पासवर्ड का अद्यतन मान्य करने के लिए अपने जवाब का उपयोग करने की कोशिश कर रहा हूँ। मैं मूल खाता नाम और पासवर्ड में प्रवेश करता हूं और फिर अद्यतन बटन पर क्लिक करता हूं और मूल खाता नाम और पासवर्ड का सत्यापन किया जाता है (यानी, यह कहने का कोई संदेश नहीं है कि कोई नया खाता या पासवर्ड दर्ज किया जाना चाहिए)। मेरा कोड है:

$(document).ready(function(){ 
$.validator.addMethod(
     "regex", 
     function(value, element, regexp) 
     { 
      if (regexp.constructor != RegExp) 
       regexp = new RegExp(regexp); 
      else if (regexp.global) 
       regexp.lastIndex = 0; 
      return this.optional(element) || regexp.test(value); 
     }, 
     "Please enter correct Characters." 
); 
jQuery.validator.addMethod("require_from_group", function (value, element, options) { 
    var numberRequired = options[0]; 
    var selector = options[1]; 
    var fields = $(selector, element.form); 
    var filled_fields = fields.filter(function() { 
     // it's more clear to compare with empty string 
     return $(this).val() != ""; 
    }); 
    var empty_fields = fields.not(filled_fields); 
    // we will mark only first empty field as invalid 
    if (filled_fields.length < numberRequired && empty_fields[0] == element) { 
     return false; 
    } 
    return true; 
    // {0} below is the 0th item in the options field 
}, jQuery.format("'Please enter either a new Account name and/or a new password'/Please fill out at least {0} of these fields.")); 
$('[data-toggle="tooltip"]').tooltip(); 
$("#contactForm").validate({ 
    groups: { // consolidate messages into one 
     names: "accountName1 enterPassword1" 
    }, 
    rules: { 
     accountName: { 
      required: true, 
      minlength: 2 
     }, 

     enterPassword: { 
      required: true, 
      minlength: 8 
     }, 

     accountName1: { 
      require_from_group: [1, ".send"], 
      minlength: 2 
     }, 

     accountName2: { 
      minlength: 2, 
      equalTo: "#accountName1" 
     }, 

     enterPassword1: { 
      require_from_group: [1, ".send"], 
      regex: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[[email protected]$!%*?&])[A-Za-z\[email protected]$!%*?&]{8,}/, 
      minlength: 8 
     }, 

     enterPassword2: { 
      regex: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[[email protected]$!%*?&])[A-Za-z\[email protected]$!%*?&]{8,}/, 
      minlength: 8, 
      equalTo: "#enterPassword1" 
     } 
    }, 

    messages: { 
     accountName: { 
      required: "Please enter your current account name.", 
      minlength: "Your account name must consist of at least 2 characters." 
     }, 

     enterPassword: { 
      required: "Please enter your current password.", 
      minlength: "Your password must consist of at least 8 characters." 
     }, 

     accountName1: { 
      minlength: "Your account name must consist of at least 2 characters." 
     }, 

     accountName2: { 
      minlength: "Your account name must consist of at least 2 characters.", 
      equalTo: "Your confirmation account name does not match the original." 
     }, 

     enterPassword1: { 
      regex: "Please nter at least 8 characters containing at least 1 lower case, 1 upercase, 1 special and 1 numeric..", 
      minlength: "Your password must consist of at least 8 characters." 
     }, 

     enterPassword2: { 
      regex: "Please enter at least 8 characters containing at least 1 lower case, 1 upercase, 1 special and 1 numeric..", 
      minlength: "Your password must consist of at least 8 characters.", 
      equalTo: "Your confirmation password does not match the original." 
     } 
    }, 

    submitHandler : function(contactForm) { 
     //do something here 
     var frm = $('#contactForm'); 
     //alert($("#accountName1").val()); 

     $.ajax({ 
      type: "POST", 
      url: "UpdateAccountView", 
      cache: false, 
      data: frm.serialize(), 
      success: function(data){ 
       console.log('Submission was successful.'); 
       console.log(data); 

       $("#accountName").focus(); 
       $('#ajaxGetUserServletResponse').text(data); 
      } 
     }); 
    } 
});  
}); // end document.ready 
संबंधित मुद्दे