ทำอย่างไรก่อนส่ง [ปิด]


141

ฉันมีรูปแบบที่มีปุ่มที่ส่งแบบฟอร์ม ฉันต้องทำอะไรบางอย่างก่อนส่งจะเกิดขึ้น ฉันพยายามทำonClickที่ปุ่มนั้น แต่มันเกิดขึ้นหลังจากส่ง

ฉันไม่สามารถแบ่งปันรหัสได้ แต่โดยทั่วไปฉันควรทำอย่างไรใน jQuery หรือ JS เพื่อจัดการสิ่งนี้



2
@Brad Christie ถ้าเพียง แต่ฉันสามารถยอมรับความคิดเห็นเป็นคำตอบ ขอบคุณมากที่เป็นประโยชน์
จิมมี่

3
ฉันเกลียดเมื่อ stackover ปิดคำถาม คุณสามารถจัดการการกระทำของคุณโดยใช้เหตุการณ์ต่อไปนี้ซึ่งจะดำเนินการตามเวลาดังต่อไปนี้ก่อนส่งแบบฟอร์ม: 1- onmouseover 2- onmousemove 3- onmousedown 4- onfocus 5- onmouseup 6- onclick 7- onsubmit
Shadi Namrouti

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

2
ตลกที่คำถามนี้ถูกปิดเพราะไม่ใช่คำถามจริง: -
AnnaKlein

คำตอบ:


207

หากคุณมีแบบฟอร์มดังกล่าว:

<form id="myform">
...
</form>

คุณสามารถใช้รหัส jQuery ต่อไปนี้เพื่อทำอะไรบางอย่างก่อนที่จะส่งแบบฟอร์ม:

$('#myform').submit(function() {
    // DO STUFF...
    return true; // return false to cancel form action
});

2
ฉันมีปัญหาในการใช้ลูปที่ต้องทำให้เสร็จก่อนส่ง ข้อเสนอแนะใด ๆ
Smilyan

มีรหัสใด ๆ ที่จะดู? ไม่แน่ใจว่าฉันเข้าใจปัญหา
ด่านบรีน

3
ทำไมสิ่งนี้ถึงถูกห่อในการเรียกฟังก์ชั่นที่ว่างเปล่า? submitฟังก์ชั่นไม่ควรที่จะผูกกับโดยตรง$('#form')โดยไม่มีฟังก์ชั่นเปล่า ๆ แก้ไข: เอกสารชี้ให้เห็นว่าการเรียกใช้ฟังก์ชันโดยรอบไม่จำเป็นต้อง
eykanal

@eykanal จุดดี ฉันไปข้างหน้าและแก้ไขคำตอบเพื่อลบฟังก์ชั่น wrapper หลังจากยืนยันว่ามันทำงานได้ดีกับมันลบออก
Jon Schneider

3
@eykanal ฉันใช้การเรียกฟังก์ชั่น "empty" เพราะนั่นเป็นการสรุป$(document).ready()ฟังก์ชั่นของ jQuery ซึ่งทำให้แน่ใจได้ว่า DOM นั้นเสร็จสมบูรณ์ก่อนที่จะแนบsubmitเหตุการณ์ หาก JS ของคุณอยู่ด้านล่างสุดของหน้าไม่จำเป็น แต่ถ้าอยู่ใน<head>ส่วนคุณจำเป็นต้องใช้ ดู: stackoverflow.com/q/13062246/135108
Dan Breen

23

สมมติว่าคุณมีรูปแบบเช่นนี้:

<form id="myForm" action="foo.php" method="post">
   <input type="text" value="" />
   <input type="submit" value="submit form" />

</form>

คุณสามารถแนบ - onsubmitเหตุการณ์กับ jQuery เช่นนี้:

$('#myForm').submit(function() {
  alert('Handler for .submit() called.');
  return false;
});

หากคุณreturn falseไม่ได้ส่งแบบฟอร์มหลังจากฟังก์ชั่นถ้าคุณส่งคืนจริงหรือไม่มีอะไรจะส่งตามปกติ

ดูเอกสารประกอบ jQueryสำหรับข้อมูลเพิ่มเติม


11

คุณสามารถใช้onclickเพื่อเรียกใช้ JavaScript หรือรหัส jQuery ก่อนที่จะส่งแบบฟอร์มเช่นนี้:

<script type="text/javascript">
    beforeSubmit = function(){
        if (1 == 1){
            //your before submit logic
        }        
        $("#formid").submit();            
    }
</script>
<input type="button" value="Click" onclick="beforeSubmit();" />

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

2
<input type = "submit" value = "คลิก" onmouseover = "beforeSubmit ();" />
Ansyori

5

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


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