วิธีบังคับให้มีการตรวจสอบความถูกต้องของแบบฟอร์ม html5 โดยไม่ต้องส่งผ่าน jQuery


286

ฉันมีแบบฟอร์มนี้ในแอพของฉันและฉันจะส่งทาง AJAX แต่ฉันต้องการใช้ HTML5 สำหรับการตรวจสอบลูกค้า ดังนั้นฉันจึงต้องการที่จะบังคับให้มีการตรวจสอบแบบฟอร์มอาจจะผ่าน jQuery

ฉันต้องการทริกเกอร์การตรวจสอบโดยไม่ต้องส่งแบบฟอร์ม เป็นไปได้ไหม?


คุณสามารถระบุจุดที่คุณต้องการตรวจสอบแบบฟอร์มได้หรือไม่? อะไรเป็นสาเหตุของการตรวจสอบ คุณต้องการตรวจสอบความถูกต้องของแต่ละฟิลด์เมื่อผู้ใช้พิมพ์ป้อน / ออกจากฟิลด์เปลี่ยนค่าหรือไม่
Peter Pajchl

6
ฉันอยากจะทำอะไรแบบนี้: $ ("# my_form"). triggerHtml5Validation ()
razenha

หน้านี้อาจช่วยลิงก์
Dan Bray

คุณสามารถทำได้โดยไม่ต้อง jQuery ดูวิธีแก้ปัญหาของฉัน
Dan Bray

คำตอบ:


444

ในการตรวจสอบว่าเขตข้อมูลนั้นถูกต้องหรือไม่ให้ใช้:

$('#myField')[0].checkValidity(); // returns true/false

ในการตรวจสอบว่าแบบฟอร์มนั้นถูกต้องหรือไม่ให้ใช้:

$('#myForm')[0].checkValidity(); // returns true/false

หากคุณต้องการแสดงข้อความแสดงข้อผิดพลาดดั้งเดิมที่เบราว์เซอร์บางตัวมี (เช่น Chrome) น่าเสียดายที่วิธีเดียวที่ทำได้คือส่งแบบฟอร์มดังนี้:

var $myForm = $('#myForm');

if(! $myForm[0].checkValidity()) {
  // If the form is invalid, submit it. The form won't actually submit;
  // this will just cause the browser to display the native HTML5 error messages.
  $myForm.find(':submit').click();
}

หวังว่านี่จะช่วยได้ โปรดทราบว่าเบราว์เซอร์ทั้งหมดไม่รองรับการตรวจสอบ HTML5


1
ฉันลองวิธีการแก้ปัญหาของคุณแล้ว แต่มันยังคงส่งแบบฟอร์มเมื่อบรรทัด $ myForm.submit () ถูกเรียกใช้
Yashpal Singla

27
ลองแทนที่$myForm.submit()ด้วย$myForm.find(':submit').click()
Abraham

8
อับราฮัมถูกต้อง คุณต้องคลิกปุ่มส่ง (โดยทางโปรแกรม) การโทร $ myForm.submit () จะไม่ทำให้เกิดการตรวจสอบ
Kevin Tighe

75
หากแบบฟอร์มของคุณไม่มีปุ่มส่งคุณสามารถปลอมได้:$('<input type="submit">').hide().appendTo($myForm).click().remove();
philfreo

15
คำตอบนี้มีประโยชน์มากเพราะมีเคล็ดลับcheckValidity()แต่ก็มีข้อผิดพลาดที่เป็นอันตรายด้วย checkValidity()เป็นสิ่งที่ทริกเกอร์ข้อความแสดงข้อผิดพลาดของเบราว์เซอร์ดั้งเดิมไม่ใช่การคลิกปุ่มส่ง หากคุณมีผู้ฟังเหตุการณ์ที่ฟังการคลิกที่ปุ่มส่งคุณจะทริกเกอร์เมื่อคุณทำ $ $ myForm.find (': submit') คลิก () `ซึ่งจะเรียกตัวเองและทำให้เกิดการเรียกซ้ำไม่รู้จบ
คำขอไม่ถูกต้อง

30

ฉันพบวิธีแก้ปัญหานี้เพื่อใช้งานได้สำหรับฉัน เพียงเรียกใช้ฟังก์ชันจาวาสคริปต์ดังนี้:

action="javascript:myFunction();"

ถ้าอย่างนั้นคุณก็มีการตรวจสอบ html5 ... ง่ายมาก :-)


3
มันก็ใช้ได้กับฉันด้วยและฉันคิดว่านี่เป็นคำตอบที่ดีที่สุด ผมตั้งaction="javascript:0"บน<form>และผูกพันclickเหตุการณ์บน<button>ไปMyFunction()และทุกการทำงานที่ดี ฉันเลิกใช้จาวาทั้งหมดแล้ว MyFunctionสามารถทดสอบform.checkValidity()เพื่อดำเนินการต่อ
orad

3
รหัสตัวอย่างเป็นประโยชน์เสมอ
BJ Patel

10
การonsubmit()เชื่อมโยงกับแบบฟอร์มนั้นเกือบจะดีกว่าการเชื่อมโยงกับปุ่มonclick()เสมอเนื่องจากมีวิธีอื่นในการส่งแบบฟอร์ม (สะดุดตาด้วยการกดปุ่มreturn.)
alttag

+1 นี่มันสุดยอดมาก ไม่มีการตรวจสอบวิธี javascript อีกต่อไปหากช่องว่างเปล่าหรือหากเป็นอีเมล เบราว์เซอร์สามารถทำเพื่อเราได้! เบราว์เซอร์นี้ใช้ร่วมกันได้หรือไม่?
โจอี.

2
ไม่action="javascript:myFunction();"หรือaction="javascript:0"ทำงานได้อีกต่อไปใน Firefox ล่าสุด (67) ทำงานบน Chrome ได้
Bobz

23
    if $("form")[0].checkValidity()
      $.ajax(
        url: "url"
        type: "post"
        data: {

        }
        dataType: "json"
        success: (data) ->

      )
    else
      #important
      $("form")[0].reportValidity()

จาก: การตรวจสอบความถูกต้องของแบบฟอร์ม html5


4
reportValidityจะได้รับการสนับสนุนโดย Chrome 40.0
MM

นั่นคือ CoffeeScript
แอมเฟตามาจิน

1
reportValidity ได้รับการสนับสนุนโดย Firefox ตั้งแต่รุ่น 49
Justin

ฉันชอบส่วน$("form")[0].reportValidity()นี้ ฉันต้องการสิ่งนั้นในกรณีที่การตรวจสอบความถูกต้องล้มเหลว
fsevenm

ที่ดี! ขอบคุณ!
stefo91

18

รหัสด้านล่างใช้งานได้สำหรับฉัน

$("#btn").click(function () {

    if ($("#frm")[0].checkValidity())
        alert('sucess');
    else
        //Validate Form
        $("#frm")[0].reportValidity()

});

1
reportValidity()เป็นฟังก์ชั่นที่ดีที่สุดสำหรับการเน้นฟิลด์ที่จำเป็น
Jamshad Ahmad

ใช่มันใช้งานได้อย่างมีเสน่ห์ แต่ถ้าเบราว์เซอร์รองรับเท่านั้น caniuse.com/#search=reportValidity
MegaMatt

16

นี่เป็นวิธีทั่วไปที่สะอาดกว่า:

สร้างแบบฟอร์มของคุณเช่นนี้ (อาจเป็นรูปแบบจำลองที่ไม่ทำอะไรเลย):

<form class="validateDontSubmit">
...

ผูกฟอร์มทั้งหมดที่คุณไม่ต้องการส่ง:

$(document).on('submit','.validateDontSubmit',function (e) {
    //prevent the form from doing a submit
    e.preventDefault();
    return false;
})

ตอนนี้สมมติว่าคุณมี<a>(ภายใน<form>) ว่าเมื่อคลิกคุณต้องการตรวจสอบแบบฟอร์ม:

$('#myLink').click(function(e){
  //Leverage the HTML5 validation w/ ajax. Have to submit to get em. Wont actually submit cuz form
  //has .validateDontSubmit class
  var $theForm = $(this).closest('form');
  //Some browsers don't implement checkValidity
  if (( typeof($theForm[0].checkValidity) == "function" ) && !$theForm[0].checkValidity()) {
     return;
  }

  //if you've gotten here - play on playa'
});

ไม่กี่หมายเหตุที่นี่:

  • ฉันสังเกตเห็นว่าคุณไม่จำเป็นต้องส่งแบบฟอร์มเพื่อให้การตรวจสอบเกิดขึ้นจริง - การโทรไปยัง checkValidity()นั้นเพียงพอ (อย่างน้อยก็ในรูปแบบโครเมียม) หากผู้อื่นสามารถเพิ่มความคิดเห็นด้วยการทดสอบทฤษฎีนี้ในเบราว์เซอร์อื่นฉันจะอัปเดตคำตอบนี้
  • <form>สิ่งที่ก่อให้เกิดการตรวจสอบที่ไม่จำเป็นต้องเป็นภายใน นี่เป็นเพียงวิธีที่สะอาดและยืดหยุ่นในการแก้ปัญหาทั่วไป

12

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

ปัญหาคือเมื่อ<form>DOM ของคุณมี<button>องค์ประกอบเดียวเมื่อถูกไล่ออกนั่น<button>จะเป็นรูปแบบโดยอัตโนมัติ หากคุณเล่นด้วย AJAX คุณอาจต้องป้องกันการกระทำเริ่มต้น แต่มีการจับคือถ้าคุณทำเช่นนั้นคุณจะป้องกันการตรวจสอบ HTML5 ขั้นพื้นฐาน ดังนั้นจึงเป็นการโทรที่ดีเพื่อป้องกันค่าเริ่มต้นที่ปุ่มนั้นเฉพาะเมื่อแบบฟอร์มนั้นถูกต้อง มิฉะนั้นการตรวจสอบ HTML5 จะปกป้องคุณจากการส่ง jQuery checkValidity()จะช่วยในเรื่องนี้:

jQuery:

$(document).ready(function() {
  $('#buttonID').on('click', function(event) {
    var isvalidate = $("#formID")[0].checkValidity();
    if (isvalidate) {
      event.preventDefault();
      // HERE YOU CAN PUT YOUR AJAX CALL
    }
  });
});

รหัสที่อธิบายไว้ข้างต้นจะช่วยให้คุณใช้การตรวจสอบ HTML5 พื้นฐาน (พร้อมการจับคู่ประเภทและรูปแบบ) โดยไม่ต้องส่งแบบฟอร์ม


6

คุณพูดถึงสองสิ่ง "การตรวจสอบความถูกต้องของ HTML5" และการตรวจสอบความถูกต้องของรูปแบบ HTML โดยใช้ javascript / jquery

HTML5 "มี" ตัวเลือกในตัวสำหรับการตรวจสอบความถูกต้องของฟอร์ม เช่นการใช้แอตทริบิวต์ "ต้อง" ในเขตข้อมูลซึ่งอาจ (ขึ้นอยู่กับการใช้งานเบราว์เซอร์) ล้มเหลวในการส่งแบบฟอร์มโดยไม่ต้องใช้ javascript / jquery

ด้วย javascrip / jquery คุณสามารถทำสิ่งนี้ได้

$('your_form_id').bind('submit', function() {
   // validate your form here
   return (valid) ? true : false;
});

2
ฉันต้องการทริกเกอร์การตรวจสอบโดยไม่ต้องส่งแบบฟอร์ม
razenha

ตามการอัปเดตของคุณ - ฉันยังคงคิดว่านี่เป็นวิธีที่ถูกต้อง คุณไม่ได้ระบุว่าคุณต้องการใช้triggerHtml5Validation()ฟังก์ชันอย่างไร รหัสด้านบนจะแนบส่งกิจกรรมไปยังแบบฟอร์มของคุณ เมื่อส่งคุณดักกิจกรรมและตรวจสอบความถูกต้องของแบบฟอร์ม หากคุณไม่เคยต้องการที่จะส่งแบบฟอร์มเพียงreturn false;และการส่งจะไม่เกิดขึ้น
Peter Pajchl

7
return (valid) ? true : falsereturn valid=== :)
Davi Koscianski Vidal

1
โอ๊ะฉัน +1 ของ @davi เพราะฉันคิดเหมือนกันในตอนแรก แต่มันไม่เหมือนกันจริงๆเพราะเพียงแค่return validไม่ส่งคืนค่าเท็จสำหรับค่า null / undefined แต่มันไม่สำคัญจริงๆคำตอบคือหลอกรหัสต่อไปประเด็นคือ: ใช้ return false เพื่อไม่ส่งแบบฟอร์ม ^^
T_D

5
var $myForm = $('#myForm ');
if (!$myForm[0].checkValidity()) {
  $('<input type="submit">').hide().appendTo($myForm).click().remove();
}

มันใช้งานไม่ได้กับโครเมี่ยม 74 ฉันจะเปิดไฟได้ไหม?
codexplorer

3

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

คุณต้องกำหนดคุณสมบัติที่จำเป็นให้กับการควบคุม

  $("#btnSave").click(function () {
    $(":input[required]").each(function () {                     
        var myForm = $('#form1');
        if (!$myForm[0].checkValidity()) 
          {                
            $(myForm).submit();              
          }
        });
  });

3

คุณไม่จำเป็นต้องมี jQuery เพื่อให้ได้สิ่งนี้ ในแบบฟอร์มของคุณเพิ่ม:

onsubmit="return buttonSubmit(this)

หรือใน JavaScript:

myform.setAttribute("onsubmit", "return buttonSubmit(this)");

ในbuttonSubmitฟังก์ชั่นของคุณ(หรืออะไรก็ตามที่คุณเรียกว่า) คุณสามารถส่งแบบฟอร์มโดยใช้ AJAX buttonSubmitจะถูกเรียกเฉพาะเมื่อแบบฟอร์มของคุณผ่านการตรวจสอบใน HTML5

ในกรณีนี้จะช่วยให้ทุกคนนี่คือbuttonSubmitหน้าที่ของฉัน:

function buttonSubmit(e)
{
    var ajax;
    var formData = new FormData();
    for (i = 0; i < e.elements.length; i++)
    {
        if (e.elements[i].type == "submit")
        {
            if (submitvalue == e.elements[i].value)
            {
                submit = e.elements[i];
                submit.disabled = true;
            }
        }
        else if (e.elements[i].type == "radio")
        {
            if (e.elements[i].checked)
                formData.append(e.elements[i].name, e.elements[i].value);
        }
        else
            formData.append(e.elements[i].name, e.elements[i].value);
    }
    formData.append("javascript", "javascript");
    var action = e.action;
    status = action.split('/').reverse()[0] + "-status";
    ajax = new XMLHttpRequest();
    ajax.addEventListener("load", manageLoad, false);
    ajax.addEventListener("error", manageError, false);
    ajax.open("POST", action);
    ajax.send(formData);
    return false;
}

แบบฟอร์มบางส่วนของฉันมีปุ่มส่งหลายปุ่มดังนั้นบรรทัดif (submitvalue == e.elements[i].value)นี้ ฉันตั้งค่าการsubmitvalueใช้งานคลิกเหตุการณ์


2

ฉันมีสถานการณ์ที่ค่อนข้างซับซ้อนซึ่งฉันต้องการปุ่มส่งหลายปุ่มเพื่อดำเนินการสิ่งต่าง ๆ ตัวอย่างเช่นบันทึกและลบ

พื้นฐานก็คือมันก็ไม่เป็นการรบกวนดังนั้นฉันจึงไม่สามารถทำให้มันเป็นปุ่มปกติ แต่ยังต้องการใช้การตรวจสอบ html5

เช่นกันเหตุการณ์ส่งถูกแทนที่ในกรณีที่ผู้ใช้กด Enter เพื่อทริกเกอร์การส่งเริ่มต้นที่คาดไว้ ในตัวอย่างนี้บันทึก

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

jsFiddle Demo - การตรวจสอบ HTML5 พร้อมส่งและคลิกแทนที่

xHTML

<form>
    <input type="text" required="required" value="" placeholder="test" />
    <button type="submit" name="save">Save</button>
    <button type="submit" name="delete">Delete</button>
</form>

JavaScript

//wrap our script in an annonymous function so that it can not be affected by other scripts and does not interact with other scripts
//ensures jQuery is the only thing declared as $
(function($){
    var isValid = null;
    var form = $('form');
    var submitButton = form.find('button[type="submit"]')
    var saveButton = submitButton.filter('[name="save"]');
    var deleteButton = submitButton.filter('[name="delete"]');

    //submit form behavior
    var submitForm = function(e){
        console.log('form submit');
        //prevent form from submitting valid or invalid
        e.preventDefault();
        //user clicked and the form was not valid
        if(isValid === false){
            isValid = null;
            return false;
        }
        //user pressed enter, process as if they clicked save instead
        saveButton.trigger('click');
    };

    //override submit button behavior
    var submitClick = function(e){
        //Test form validitiy (HTML5) and store it in a global variable so both functions can use it
        isValid = form[0].checkValidity();
        if(false === isValid){
            //allow the browser's default submit event behavior 
            return true;
        }
        //prevent default behavior
        e.preventDefault();
        //additional processing - $.ajax() etc
        //.........
        alert('Success');
    };

    //override submit form event
    form.submit(submitForm);

    //override submit button click event
    submitButton.click(submitClick);
})(jQuery);

ข้อแม้ที่จะใช้ Javascript คือการคลิกเริ่มต้นของเบราว์เซอร์ต้องเผยแพร่สู่เหตุการณ์ส่งต้องเกิดขึ้นเพื่อแสดงข้อความแสดงข้อผิดพลาดโดยไม่สนับสนุนแต่ละเบราว์เซอร์ในรหัสของคุณ มิฉะนั้นหากเหตุการณ์การคลิกถูกแทนที่ด้วย event.preventDefault () หรือส่งคืนค่าเท็จจะไม่เผยแพร่ไปยังกิจกรรมส่งของเบราว์เซอร์

สิ่งที่จะชี้ให้เห็นคือในบางเบราว์เซอร์จะไม่ทริกเกอร์การส่งแบบฟอร์มเมื่อผู้ใช้กดป้อน แต่มันจะทริกเกอร์ปุ่มส่งครั้งแรกในแบบฟอร์ม ดังนั้นจึงมี console.log ('ส่งแบบฟอร์ม') เพื่อแสดงว่ามันไม่ได้ทริกเกอร์


เราทราบดีว่าสิ่งนี้สามารถทำได้โดยไม่ต้อง jQuery แต่ชื่อผู้แต่ง OP ของหัวข้อนี้: "วิธีการบังคับใช้การตรวจสอบแบบฟอร์ม html5 โดยไม่ส่งผ่าน jQuery" แนะนำ jQuery อย่างชัดเจนต้องใช้
vzr

@vzr คำตอบของฉันใช้jQueryอย่างชัดเจน มันแตกต่างกันที่จะจัดการกับการประมวลผลการตรวจสอบ HTML5 ด้วยปุ่มส่งหลายและป้องกันการส่งแบบฟอร์ม AJAX เมื่อไม่ถูกต้อง เริ่มต้นsaveการดำเนินการเมื่อผู้ใช้กดenterปุ่มบนแป้นพิมพ์ ซึ่งตอนที่ฉันโพสต์ไม่มีคำตอบที่ให้ไว้เป็นวิธีแก้ปัญหาสำหรับปุ่มส่งหลายปุ่มหรือการจับปุ่ม Enter เพื่อป้องกันการส่ง ajax
fyrye

2

คุณสามารถทำได้โดยไม่ต้องส่งแบบฟอร์ม

ตัวอย่างเช่นหากปุ่มส่งแบบฟอร์มที่มี id "ค้นหา" อยู่ในรูปแบบอื่น คุณสามารถโทรคลิกเหตุการณ์ที่ปุ่มส่งและโทร ev.preventDefault หลังจากนั้น สำหรับกรณีของฉันฉันตรวจสอบแบบฟอร์ม B จากการส่งแบบฟอร์ม แบบนี้

function validateFormB(ev){ // DOM Event object
  //search is in Form A
  $("#search").click();
  ev.preventDefault();
  //Form B validation from here on
}

2

วิธีนี้ใช้ได้ดีสำหรับฉัน:

  1. เพิ่มonSubmitแอตทริบิวต์ในของคุณformอย่าลืมที่จะรวมreturnไว้ในค่า

    <form id='frm-contact' method='POST' action='' onSubmit="return contact()">
  2. กำหนดฟังก์ชั่น

    function contact(params) {
        $.ajax({
            url: 'sendmail.php',
            type: "POST",
            dataType: "json",
            timeout: 5000,
            data: { params:params },
            success: function (data, textStatus, jqXHR) {
                // callback
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log(jqXHR.responseText);
            }
        });
    
        return false;
    }

1
$("#form").submit(function() { $("#saveButton").attr("disabled", true); });

ไม่ใช่คำตอบที่ดีที่สุด แต่ใช้ได้สำหรับฉัน


1

ฉันรู้ว่าสิ่งนี้ได้รับคำตอบแล้ว แต่ฉันมีวิธีแก้ไขปัญหาอื่นที่เป็นไปได้

หากใช้ jQuery คุณสามารถทำได้

ขั้นแรกให้สร้างส่วนขยายสองสามรายการบน jquery เพื่อให้คุณสามารถนำกลับมาใช้ใหม่ได้ตามต้องการ

$.extend({
    bypassDefaultSubmit: function (formName, newSubmitMethod) {
        $('#'+formName).submit(function (event) {
            newSubmitMethod();
            event.preventDefault();
        }
    }
});

ถัดไปทำอะไรแบบนี้ที่คุณต้องการใช้

<script type="text/javascript">
    /*if you want to validate the form on a submit call, 
      and you never want the form to be submitted via
      a normal submit operation, or maybe you want handle it.
    */
    $(function () {
        $.bypassDefaultSubmit('form1', submit);
    });
    function submit(){ 
        //do something, or nothing if you just want the validation
    }

</script>

1
$(document).on("submit", false);

submitButton.click(function(e) {
    if (form.checkValidity()) {
        form.submit();
    }
});

$ (เอกสาร) .on ("ส่ง", เท็จ); // อันนี้ทำงานได้อย่างสมบูรณ์นี่คือสิ่งที่ฉันกำลังมองหา :)
Akshay Shrivastav

1

สิ่งนี้ทำงานได้แบบฉันเพื่อแสดงข้อความแสดงข้อผิดพลาด HTML 5 ดั้งเดิมพร้อมการตรวจสอบแบบฟอร์ม

<button id="btnRegister" class="btn btn-success btn btn-lg" type="submit"> Register </button>



$('#RegForm').on('submit', function () 
{

if (this.checkValidity() == false) 
{

 // if form is not valid show native error messages 

return false;

}
else
{

 // if form is valid , show please wait message and disable the button

 $("#btnRegister").html("<i class='fa fa-spinner fa-spin'></i> Please Wait...");

 $(this).find(':submit').attr('disabled', 'disabled');

}


});

หมายเหตุ: RegForm form idเป็น

การอ้างอิง

หวังว่าจะช่วยให้ใครบางคน


คุณต้องเพิ่มกิจกรรมเพื่อเปิดใช้งานปุ่มส่งปิดการใช้งาน
talsibony

1

นี่เป็นวิธีการที่ตรงไปตรงมาในการทำให้ HTML5 ทำการตรวจสอบความถูกต้องสำหรับรูปแบบใด ๆ ในขณะที่ยังคงมีการควบคุม JS ที่ทันสมัยเหนือแบบฟอร์ม ข้อแม้เท่านั้นคือปุ่มส่งต้องอยู่ภายใน<form>ข้อแม้เพียงอย่างเดียวคือปุ่มส่งจะต้องอยู่ภายใน

HTML

<form id="newUserForm" name="create">
Email<input type="email" name="username" id="username" size="25" required>
Phone<input type="tel" id="phone" name="phone" pattern="(?:\(\d{3}\)|\d{3})[- ]?\d{3}[- ]?\d{4}" size="12" maxlength="12" required>
<input id="submit" type="submit" value="Create Account" >
</form>

js

// bind in ready() function
jQuery( "#submit" ).click( newAcctSubmit );

function newAcctSubmit()
{
  var myForm = jQuery( "#newUserForm" );

  // html 5 is doing the form validation for us,
  // so no need here (but backend will need to still for security)
  if ( ! myForm[0].checkValidity() )
  {
    // bonk! failed to validate, so return true which lets the
    // browser show native validation messages to the user
    return true;
  }

  // post form with jQuery or whatever you want to do with a valid form!
  var formVars = myForm.serialize();
  etc...
}

0

ฉันคิดว่าวิธีที่ดีที่สุด

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

และเราสามารถใช้ฟังก์ชั่นตรวจสอบความถูกต้อง jQuery valid ()ซึ่งตรวจสอบว่าแบบฟอร์มที่เลือกนั้นถูกต้องหรือไม่ว่าองค์ประกอบที่เลือกทั้งหมดจะถูกต้องโดยไม่ต้องส่งแบบฟอร์ม

<form id="myform">
   <input type="text" name="name" required>
   <br>
   <button type="button">Validate!</button>
</form>
<script>
  var form = $( "#myform" );
  form.validate();
  $( "button" ).click(function() {
    console.log( "Valid: " + form.valid() );
  });
</script>

0

ตามคำถาม html5 ความถูกต้องควรตรวจสอบความสามารถในการใช้ jQuery ในตอนแรกและส่วนใหญ่ของคำตอบนี้ไม่ได้เกิดขึ้นและเหตุผลในการนี้เป็นดังนี้:

ในขณะที่ตรวจสอบโดยใช้ฟังก์ชั่นเริ่มต้นของรูปแบบ html5

checkValidity();// returns true/false

เราจำเป็นต้องเข้าใจว่า jQuery ส่งคืนอาร์เรย์วัตถุในขณะที่เลือกเช่นนี้

$("#myForm")

ดังนั้นคุณต้องระบุดัชนีแรกเพื่อให้ฟังก์ชัน checkValidity () ทำงานได้

$('#myForm')[0].checkValidity()

นี่คือทางออกที่สมบูรณ์:

<button type="button" name="button" onclick="saveData()">Save</button>

function saveData()
{
    if($('#myForm')[0].checkValidity()){
        $.ajax({
          type: "POST",
          url: "save.php",
          data: data,
          success: function(resp){console.log("Response: "+resp);}
        });
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.