jQuery Validate - ต้องกรอกอย่างน้อยหนึ่งฟิลด์ในกลุ่ม


98

ฉันใช้ jQuery Validate Plugin ที่ยอดเยี่ยมเพื่อตรวจสอบบางรูปแบบ ในรูปแบบหนึ่งฉันต้องตรวจสอบให้แน่ใจว่าผู้ใช้กรอกข้อมูลในกลุ่มฟิลด์อย่างน้อยหนึ่งกลุ่ม ฉันคิดว่าฉันมีทางออกที่ดีทีเดียวและอยากจะแบ่งปัน โปรดแนะนำการปรับปรุงที่คุณคิดได้

ฉันค้นหาวิธีการตรวจสอบความถูกต้องแบบกำหนดเองของ Rebecca Murpheyซึ่งมีประโยชน์มาก

ฉันปรับปรุงสิ่งนี้ในสามวิธี:

  1. เพื่อให้คุณผ่านตัวเลือกสำหรับกลุ่มเขตข้อมูล
  2. เพื่อให้คุณระบุจำนวนกลุ่มที่ต้องกรอกเพื่อตรวจสอบความถูกต้องจึงจะผ่านได้
  3. เพื่อแสดงอินพุตทั้งหมดในกลุ่มว่าผ่านการตรวจสอบความถูกต้องทันทีที่หนึ่งในนั้นผ่านการตรวจสอบความถูกต้อง (ดูการตะโกนถึงNick Craverในตอนท้าย)

ดังนั้นคุณสามารถพูดได้ว่า"อย่างน้อยต้องใส่ X อินพุตที่ตรงกับตัวเลือก Y"

ผลลัพธ์สุดท้ายด้วยมาร์กอัปดังนี้:

<input class="productinfo" name="partnumber">
<input class="productinfo" name="description">

... เป็นกลุ่มของกฎดังนี้:

// Both these inputs input will validate if 
// at least 1 input with class 'productinfo' is filled
partnumber: {
   require_from_group: [1,".productinfo"]
  }
description: {
   require_from_group: [1,".productinfo"]
}

รายการ # 3 ถือว่าคุณกำลังเพิ่มคลาสใน.checkedข้อความแสดงข้อผิดพลาดของคุณเมื่อตรวจสอบความถูกต้องสำเร็จ คุณสามารถทำได้ดังต่อไปนี้แสดงให้เห็นที่นี่

success: function(label) {  
        label.html(" ").addClass("checked"); 
}

เช่นเดียวกับในการสาธิตที่เชื่อมโยงด้านบนฉันใช้ CSS เพื่อให้span.errorภาพ X แต่ละภาพเป็นพื้นหลังเว้นแต่จะมีคลาส.checkedซึ่งในกรณีนี้จะได้รับภาพเครื่องหมายถูก

นี่คือรหัสของฉันจนถึงตอนนี้:

jQuery.validator.addMethod("require_from_group", function(value, element, options) {
    var numberRequired = options[0];
    var selector = options[1];
    //Look for our selector within the parent form
    var validOrNot = $(selector, element.form).filter(function() {
         // Each field is kept if it has a value
         return $(this).val();
         // Set to true if there are enough, else to false
      }).length >= numberRequired;

    // The elegent part - this element needs to check the others that match the
    // selector, but we don't want to set off a feedback loop where each element
    // has to check each other element. It would be like:
    // Element 1: "I might be valid if you're valid. Are you?"
    // Element 2: "Let's see. I might be valid if YOU'RE valid. Are you?"
    // Element 1: "Let's see. I might be valid if YOU'RE valid. Are you?"
    // ...etc, until we get a "too much recursion" error.
    //
    // So instead we
    //  1) Flag all matching elements as 'currently being validated'
    //  using jQuery's .data()
    //  2) Re-run validation on each of them. Since the others are now
    //     flagged as being in the process, they will skip this section,
    //     and therefore won't turn around and validate everything else
    //  3) Once that's done, we remove the 'currently being validated' flag
    //     from all the elements
    if(!$(element).data('being_validated')) {
    var fields = $(selector, element.form);
    fields.data('being_validated', true);
    // .valid() means "validate using all applicable rules" (which 
    // includes this one)
    fields.valid();
    fields.data('being_validated', false);
    }
    return validOrNot;
    // {0} below is the 0th item in the options field
    }, jQuery.format("Please fill out at least {0} of these fields."));

ไชโย!

ตะโกนออกไป

ตอนนี้สำหรับการตะโกนนั้น - แต่เดิมรหัสของฉันเพียงแค่ซ่อนข้อความแสดงข้อผิดพลาดในช่องที่ตรงกันอื่น ๆ แบบสุ่มสี่สุ่มห้าแทนที่จะตรวจสอบความถูกต้องอีกครั้งซึ่งหมายความว่าหากมีปัญหาอื่น (เช่น 'อนุญาตเฉพาะตัวเลขและคุณป้อนตัวอักษร') มันถูกซ่อนไว้จนกว่าผู้ใช้จะพยายามส่ง นี่เป็นเพราะฉันไม่รู้วิธีหลีกเลี่ยงการวนรอบข้อเสนอแนะที่กล่าวถึงในความคิดเห็นด้านบน ฉันรู้ว่าต้องมีวิธีดังนั้นฉันจึงถามคำถามและNick Craverก็ให้ความกระจ่างแก่ฉัน ขอบคุณนิค!

แก้ไขคำถามแล้ว

เดิมเป็นคำถามประเภท "ขอฉันแชร์และดูว่ามีใครแนะนำการปรับปรุงได้บ้าง" แม้ว่าฉันจะยังคงยินดีรับฟังความคิดเห็น แต่ฉันคิดว่ามันค่อนข้างสมบูรณ์ในตอนนี้ (อาจจะสั้นกว่านี้ก็ได้ แต่ฉันอยากให้อ่านง่ายและไม่จำเป็นต้องกระชับ) แค่นั้นแหละ!

อัปเดต - ตอนนี้เป็นส่วนหนึ่งของการตรวจสอบ jQuery

สิ่งนี้ถูกเพิ่มอย่างเป็นทางการในการตรวจสอบความถูกต้อง jQueryเมื่อวันที่ 4/3/2012


นอกจากนี้โปรดดูกฎที่เกี่ยวข้องอย่างใกล้ชิด -“ ไม่ว่าจะข้ามช่องเหล่านี้หรือกรอกอย่างน้อย X ของช่องเหล่านี้” - stackoverflow.com/questions/1888976/…
Nathan Long

เหตุใดการป้อนข้อมูลโดยพลการหนึ่งรายการจึงต้องรับผิดชอบในการตรวจสอบว่ามีการป้อนข้อมูลอื่นหรือไม่ นี่ไม่สมเหตุสมผลเลย บางทีคุณอาจรวมมาร์กอัปเล็กน้อยกับองค์ประกอบที่เกี่ยวข้อง?
montrealist

@dalbaeb - ฉันชี้แจงตัวอย่างเล็กน้อย ไม่ใช่ว่าการป้อนข้อมูลโดยพลการหนึ่งรายการมีหน้าที่ตรวจสอบผู้อื่น แต่ละอินพุตในกลุ่มมีหน้าที่ตรวจสอบข้อมูลอื่น ๆ ทั้งหมด
Nathan Long

นั่นคือสิ่งที่ฉันคิดขอบคุณมาก!
montrealist

3
ขอบคุณสิ่งนี้ใช้ได้กับฉัน แต่ช่องอื่น ๆ ที่จำเป็นในแบบฟอร์มตอนนี้จะไม่ตอบสนองอีกต่อไปเว้นแต่จะได้รับและสูญเสียโฟกัสหลังจากการตรวจสอบ (มีคนเพิ่มสิ่งนี้เป็นคำตอบสำหรับคำถามอื่น ๆ ของคุณ แต่ต้องถูกตั้งค่าสถานะเนื่องจากไม่ใช่คำตอบ)
mydoghasworms

คำตอบ:


21

นั่นเป็นทางออกที่ยอดเยี่ยมของนาธาน ขอบคุณมาก.

นี่คือวิธีที่ทำให้โค้ดข้างต้นใช้งานได้ในกรณีที่มีคนประสบปัญหาในการรวมเข้าด้วยกันเช่นที่ฉันทำ:

รหัสภายใน additional-method.js :

jQuery.validator.addMethod("require_from_group", function(value, element, options) {
...// Nathan's code without any changes
}, jQuery.format("Please fill out at least {0} of these fields."));

// "filone" is the class we will use for the input elements at this example
jQuery.validator.addClassRules("fillone", {
    require_from_group: [1,".fillone"]
});

รหัสภายใน ไฟล์html :

<input id="field1" class="fillone" type="text" value="" name="field1" />
<input id="field2" class="fillone" type="text" value="" name="field2" />
<input id="field3" class="fillone" type="text" value="" name="field3" />
<input id="field4" class="fillone" type="text" value="" name="field4" />

อย่าลืมใส่ไฟล์ method.js เพิ่มเติม!


ดีใจที่เป็นประโยชน์สำหรับคุณและขอบคุณสำหรับการบิ่นข้อมูล อย่างไรก็ตามแทนที่จะใช้เมธอด addClassRules ฉันชอบที่จะใช้อาร์เรย์ของกฎในแต่ละฟอร์ม หากคุณไปที่หน้านี้ ( jquery.bassistance.de/validate/demo/milk ) และคลิก "แสดงสคริปต์ที่ใช้ในหน้านี้" คุณจะเห็นตัวอย่าง ฉันก้าวไปอีกขั้น: ฉันประกาศอาร์เรย์ที่เรียกว่า "กฎ" จากนั้นแยกกันฉันใช้กับ var validator = $ ('# formtovalidate') validate (กฎ);
Nathan Long

ความคิดอีกอย่าง: คลาส 'Fillone' ที่คุณแสดงที่นี่อาจเป็นปัญหา จะเกิดอะไรขึ้นถ้าในแบบฟอร์มเดียวกันคุณต้องมีหมายเลขชิ้นส่วนอย่างน้อยหนึ่งชื่อและชื่อผู้ติดต่ออย่างน้อยหนึ่งชื่อ กฎของคุณจะอนุญาต 0 ชื่อผู้ติดต่อตราบเท่าที่มีหมายเลขชิ้นส่วนอย่างน้อยหนึ่งหมายเลข ฉันคิดว่าควรตั้งกฎเช่นrequire_from_group: [1,".partnumber"]และ...[1,".contactname"]เพื่อให้แน่ใจว่าคุณกำลังตรวจสอบสิ่งที่ถูกต้อง
Nathan Long

6

ทางออกที่ดี อย่างไรก็ตามฉันมีปัญหาเกี่ยวกับกฎที่จำเป็นอื่น ๆ ไม่ทำงาน การดำเนินการ .valid () กับแบบฟอร์มช่วยแก้ปัญหานี้ให้ฉัน

if(!$(element).data('being_validated')) {
  var fields = $(selector, element.form);
  fields.data('being_validated', true); 
  $(element.form).valid();
  fields.data('being_validated', false);
}

1
ขอบคุณฌอนฉันประสบปัญหานี้เช่นกัน มีปัญหาอย่างหนึ่งในการแก้ปัญหานี้เมื่อผู้ใช้เข้าสู่แบบฟอร์มเป็นครั้งแรก - ทันทีที่กรอกฟิลด์ต้องการจากกลุ่มแรกฟิลด์แบบฟอร์มอื่น ๆ ทั้งหมดจะได้รับการตรวจสอบและทำเครื่องหมายว่าผิดพลาด วิธีที่ผมแก้ปัญหานี้คือการเพิ่ม form.submit () validator.formSubmit = trueจัดการก่อนที่จะสร้างตัวอย่างของการตรวจสอบทั้งในทางซึ่งเราได้ตั้งธง ในวิธีการกำหนดจากกลุ่มฉันตรวจสอบแฟล็กนั้น ถ้ามันมีฉันทำอย่างอื่นที่ฉันทำ$(element.form).valid(); fields.valid();
Christof

ใครช่วยอธิบายได้ว่าเกิดอะไรขึ้นที่นี่? ฉันมีกฎที่ค่อนข้างคล้ายกันซึ่งได้ผล แต่เราไม่ได้แก้ไขปัญหาการตรวจสอบซ้ำ (ช่องอื่น ๆ ในกลุ่มยังคงถูกทำเครื่องหมายว่าไม่ถูกต้อง) แต่ตอนนี้ฉันพบว่าแบบฟอร์มส่งแม้ว่าจะไม่ถูกต้อง หากช่องที่จัดกลุ่มถูกต้องก็จะไม่เข้าสู่ตัวจัดการส่งและหากไม่ถูกต้องก็จะเข้าสู่ invalidHandler แต่จะส่งต่อไป! ฉันจะบอกว่านี่เป็นข้อผิดพลาดที่ค่อนข้างร้ายแรงในปลั๊กอินการตรวจสอบความถูกต้อง? กฎที่ส่งคืนถูกต้องจะใช้กับกฎนั้นเท่านั้น (ไม่ใช่ทั้งฟิลด์) ดังนั้นทำไมการส่งแบบฟอร์มที่ไม่ถูกต้อง
Adam

ฉันได้ตรวจสอบเพิ่มเติมแล้วและเป็นฟิลด์ก่อนกลุ่มที่ไม่ได้ตรวจสอบความถูกต้องของ proeprly ฉันถามคำถามนี้เป็นคำถามแยกกัน (ด้วยวิธีแก้ปัญหาบางส่วนที่ฉันได้ดิสโก้ไว้): stackoverflow.com/questions/12690898/…
Adam

4

ขอบคุณฌอน นั่นช่วยแก้ปัญหาที่ฉันมีกับรหัสโดยไม่สนใจกฎอื่น ๆ

ฉันยังได้ทำการเปลี่ยนแปลงเล็กน้อยเพื่อให้ข้อความ "กรุณากรอกข้อมูลอย่างน้อย 1 ช่อง .. " จะแสดงใน div แยกกันแทนที่จะเป็นทุกฟิลด์

ใส่สคริปต์ตรวจสอบแบบฟอร์ม

showErrors: function(errorMap, errorList){
            $("#form_error").html("Please fill out at least 1 field before submitting.");
            this.defaultShowErrors();
        },

เพิ่มที่ใดที่หนึ่งในหน้า

<div class="error" id="form_error"></div>

เพิ่มไปยังฟังก์ชัน addMethod เมธอด require_from_group

 if(validOrNot){
    $("#form_error").hide();
}else{
    $("#form_error").show();
}
......
}, jQuery.format(" &nbsp;(!)"));

4

ฉันได้ส่งโปรแกรมแก้ไขที่ไม่ประสบปัญหาในเวอร์ชันปัจจุบัน (โดยที่ตัวเลือก "จำเป็น" หยุดทำงานอย่างถูกต้องในช่องอื่น ๆ การอภิปรายปัญหาเกี่ยวกับเวอร์ชันปัจจุบันอยู่ในgithub GitHub

ตัวอย่างที่http://jsfiddle.net/f887W/10/

jQuery.validator.addMethod("require_from_group", function (value, element, options) {
var validator = this;
var minRequired = options[0];
var selector = options[1];
var validOrNot = jQuery(selector, element.form).filter(function () {
    return validator.elementValue(this);
}).length >= minRequired;

// remove all events in namespace require_from_group
jQuery(selector, element.form).off('.require_from_group');

//add the required events to trigger revalidation if setting is enabled in the validator
if (this.settings.onkeyup) {
    jQuery(selector, element.form).on({
        'keyup.require_from_group': function (e) {
            jQuery(selector, element.form).valid();
        }
    });
}

if (this.settings.onfocusin) {
    jQuery(selector, element.form).on({
        'focusin.require_from_group': function (e) {
            jQuery(selector, element.form).valid();
        }
    });
}

if (this.settings.click) {
    jQuery(selector, element.form).on({
        'click.require_from_group': function (e) {
            jQuery(selector, element.form).valid();
        }
    });
}

if (this.settings.onfocusout) {
    jQuery(selector, element.form).on({
        'focusout.require_from_group': function (e) {
            jQuery(selector, element.form).valid();
        }
    });
}

return validOrNot;
}, jQuery.format("Please fill at least {0} of these fields."));

3

การเริ่มต้นชื่อตัวแปรด้วย $ เป็นสิ่งจำเป็นใน PHP แต่ค่อนข้างแปลก (IMHO) ใน Javascript นอกจากนี้ฉันเชื่อว่าคุณเรียกมันว่า "$ module" สองครั้งและ "module" ครั้งเดียวใช่ไหม ดูเหมือนว่ารหัสนี้ไม่ควรใช้งานได้

นอกจากนี้ฉันไม่แน่ใจว่ามันเป็นไวยากรณ์ของปลั๊กอิน jQuery ปกติหรือไม่ แต่ฉันอาจเพิ่มความคิดเห็นด้านบนการเรียก addMethod ของคุณเพื่ออธิบายสิ่งที่คุณทำสำเร็จ แม้จะมีคำอธิบายข้อความของคุณด้านบน แต่ก็ยากที่จะทำตามโค้ดเพราะฉันไม่คุ้นเคยกับฟิลด์เซ็ต: เติมค่าองค์ประกอบหรือตัวเลือกที่อ้างถึง บางทีสิ่งนี้ส่วนใหญ่จะเห็นได้ชัดสำหรับคนที่คุ้นเคยกับปลั๊กอิน Validate ดังนั้นโปรดใช้วิจารณญาณว่าอะไรคือจำนวนคำอธิบายที่เหมาะสม

บางทีคุณอาจแยกตัวแปรออกมาเพื่อจัดทำโค้ดด้วยตนเอง ชอบ,

var atLeastOneFilled = module.find(...).length > 0;
if (atLeastOneFilled) {
  var stillMarkedWithErrors = module.find(...).next(...).not(...);
  stillMarkedWithErrors.text("").addClass(...)

(สมมติว่าฉันเข้าใจความหมายของโค้ดเหล่านี้ของคุณ! :))

ฉันไม่แน่ใจว่า "โมดูล" หมายถึงอะไรจริงๆแล้ว - มีชื่อที่เฉพาะเจาะจงมากขึ้นที่คุณสามารถตั้งให้กับตัวแปรนี้ได้หรือไม่

รหัสดีโดยรวม!


ขอบคุณสำหรับคำแนะนำ - ฉันได้ชี้แจงชื่อตัวแปรและแยกย่อยรหัสเพื่อให้อ่านง่ายขึ้น
Nathan Long

3

นี่คือรอยแตกของฉันที่คำตอบของ Rocket Hazmat พยายามแก้ปัญหาของฟิลด์ที่กำหนดอื่น ๆ ซึ่งจำเป็นต้องได้รับการตรวจสอบ แต่การทำเครื่องหมายฟิลด์ทั้งหมดว่าถูกต้องเมื่อกรอกข้อมูลสำเร็จ

jQuery.validator.addMethod("require_from_group", function(value, element, options){
    var numberRequired = options[0],
    selector = options[1],
    $fields = $(selector, element.form),
    validOrNot = $fields.filter(function() {
        return $(this).val();
    }).length >= numberRequired,
    validator = this;
    if(!$(element).data('being_validated')) {
        $fields.data('being_validated', true).each(function(){
            validator.valid(this);
        }).data('being_validated', false);
    }
    if (validOrNot) {
    $(selector).each(function() {
            $(this).removeClass('error');
            $('label.error[for='+$(this).attr('id')+']').remove();
        });
    }
    return validOrNot;
}, jQuery.format("Please fill out at least {0} of these fields."));

ปัญหาเดียวที่เหลืออยู่ในตอนนี้คือขอบกรณีที่ฟิลด์ว่างจากนั้นเติมแล้วว่างอีกครั้ง ... ซึ่งในกรณีนี้ข้อผิดพลาดจะถูกนำไปใช้กับฟิลด์เดียวไม่ใช่กลุ่ม แต่ดูเหมือนว่าไม่น่าจะเกิดขึ้นกับความถี่ใด ๆ และในทางเทคนิคก็ยังใช้ได้ในกรณีนั้น


ไม่มีประเด็นใดในคำตอบนี้เนื่องจากวิธีการ / กฎนี้รวมเข้ากับปลั๊กอินในเดือนเมษายน 2555
Sparky

ฉันมีปัญหาเดียวกันกับที่ Rocket Hazmat มีวิธีการที่มาพร้อมกับ validator ตรวจสอบความถูกต้องว่ากลุ่มของเขตข้อมูลหนึ่ง แต่ไม่มีการตรวจสอบเขตข้อมูลอื่นโดยใช้วิธีการอื่น คำตอบนี้เป็นความพยายามที่จะแก้ไขปัญหานั้น หากคุณมีวิธีแก้ไขที่ดีกว่าโปรดแจ้งให้เราทราบ
squarecandy

จนกว่านักพัฒนาซอฟต์แวร์จะแก้ไขปัญหานี้อย่างถาวรแทนที่จะเพิ่มความสับสนฉันขอแนะนำวิธีแก้ปัญหาชั่วคราวที่ได้รับการรับรองที่นี่: github.com/jzaefferer/jquery-validation/issues/412
Sparky

2

เนื่องจากแบบฟอร์มที่ฉันกำลังทำงานอยู่มีขอบเขตที่ถูกโคลนหลายแห่งที่มีอินพุตที่จัดกลุ่มไว้เช่นนี้ฉันจึงส่งอาร์กิวเมนต์พิเศษไปยังตัวสร้าง require_from_group โดยเปลี่ยนหนึ่งบรรทัดของฟังก์ชัน addMethod ของคุณ:

var commonParent = $(element).parents(options[2]);

และวิธีนี้สามารถส่งตัวเลือก ID หรือชื่อองค์ประกอบได้ครั้งเดียว:

jQuery.validator.addClassRules("reqgrp", {require_from_group: [1, ".reqgrp", 'fieldset']});

และตัวตรวจสอบความถูกต้องจะ จำกัด การตรวจสอบความถูกต้องไว้ที่องค์ประกอบที่มีคลาสนั้น ๆ ภายในชุดฟิลด์แต่ละชุดเท่านั้นแทนที่จะพยายามนับองค์ประกอบที่แบ่งประเภท. reqgrp ทั้งหมดในรูปแบบ


1

ฉันมีปัญหากับกฎอื่น ๆ ที่ไม่ได้รับการตรวจสอบร่วมกับสิ่งนี้ฉันจึงเปลี่ยน:

fields.valid();

สำหรับสิ่งนี้:

var validator = this;
fields.each(function(){
   validator.valid(this);
});

ฉันยังได้ทำการปรับปรุง (ส่วนตัว) เล็กน้อยและนี่คือเวอร์ชันที่ฉันใช้:

jQuery.validator.addMethod("require_from_group", function(value, element, options){
    var numberRequired = options[0],
    selector = options[1],
    $fields = $(selector, element.form),
    validOrNot = $fields.filter(function() {
        return $(this).val();
    }).length >= numberRequired,
    validator = this;
    if(!$(element).data('being_validated')) {
        $fields.data('being_validated', true).each(function(){
            validator.valid(this);
        }).data('being_validated', false);
    }
    return validOrNot;
}, jQuery.format("Please fill out at least {0} of these fields."));

ทำงานทำให้ฟิลด์อื่นตรวจสอบความถูกต้องอีกครั้ง แต่ตอนนี้เมื่อฟิลด์ทั้งหมดของกลุ่มถูกทำเครื่องหมายว่าไม่ถูกต้องและคุณกรอกข้อมูลลงไปเพียงฟิลด์เดียวเท่านั้นที่จะได้รับการตรวจสอบ อย่างน้อยสำหรับฉัน?
Christof

@Chris - ดูคำตอบใหม่ของฉันที่สร้างขึ้นจากคำตอบนี้และกล่าวถึงสิ่งนี้
squarecandy

0

ขอบคุณนาธาน คุณช่วยฉันได้มาก

อย่างไรก็ตามฉันต้องสังเกตว่ากฎนี้ไม่พร้อมใช้งาน jQuery.noConflict () ดังนั้นเราต้องแทนที่ $ ทั้งหมดด้วย jQuery เพื่อทำงานด้วยพูดว่าvar $j = jQuery.noConflict()

และฉันมีคำถาม: ฉันจะทำให้มันทำงานเหมือนกฎในตัวได้อย่างไร? ตัวอย่างเช่นหากฉันป้อนอีเมลข้อความ "โปรดป้อนอีเมลที่ถูกต้อง" จะหายไปโดยอัตโนมัติ แต่หากฉันกรอกข้อความแสดงข้อผิดพลาดช่องใดช่องหนึ่ง


คุณพูดถูก - ฉันไม่ได้พิจารณาสถานการณ์ความขัดแย้ง ฉันอาจอัปเดตสิ่งนั้นในอนาคต แต่คุณสามารถค้นหาและแทนที่ได้อย่างง่ายดายหากต้องการ สำหรับคำถามที่สองของคุณฉันไม่เห็นปัญหาเดียวกัน ด้วยการทดสอบอย่างรวดเร็วหากจำเป็นต้องมีฟิลด์หนึ่งฟิลด์จากกลุ่มทันทีที่ฉันพิมพ์อะไรก็ตามทั้งกลุ่มจะผ่านกฎนั้น หากจำเป็นต้องใช้มากกว่าหนึ่งคนทันทีที่กรอกข้อมูลที่ต้องการสุดท้ายและสูญเสียโฟกัสทั้งกลุ่มจะผ่านไป นั่นคือสิ่งที่คุณเห็น?
Nathan Long

อืมด้วยเหตุผลบางอย่างมาร์กอัปเมาและฉันไม่ประสบความสำเร็จในการแก้ไข
Rinat

Rinat - คุณสามารถลดความซับซ้อนและ จำกัด ปัญหาได้หรือไม่? ลองใช้รหัสของฉันในรูปแบบที่ง่ายกว่าที่ไม่ต้องการการเปลี่ยนแปลงที่ไม่มีข้อขัดแย้ง ทำแบบฟอร์มที่ง่ายที่สุดที่คุณสามารถทดสอบได้และเริ่มใช้งานได้ก่อน
Nathan Long
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.