จะป้องกันการกดปุ่ม ENTER เพื่อส่งแบบฟอร์มบนเว็บได้อย่างไร


207

คุณจะป้องกันการENTERกดปุ่มจากการส่งแบบฟอร์มในแอปพลิเคชันบนเว็บได้อย่างไร

คำตอบ:


99

[ การแก้ไขปี 2012 ไม่มีตัวจัดการแบบอินไลน์รักษา textarea เข้าสู่การจัดการ]

function checkEnter(e){
 e = e || event;
 var txtArea = /textarea/i.test((e.target || e.srcElement).tagName);
 return txtArea || (e.keyCode || e.which || e.charCode || 0) !== 13;
}

ตอนนี้คุณสามารถกำหนดตัวจัดการปุ่มกดบนแบบฟอร์ม:
<form [... ] onkeypress = "return checkEnter (event)">

document.querySelector('form').onkeypress = checkEnter;

3
โดยวิธีการ: คุณสามารถเพิ่มการตรวจสอบสำหรับประเภทการป้อนข้อมูล (ผ่านแหล่งที่มาของเหตุการณ์) ในฟังก์ชั่น checkEnter เพื่อยกเว้น textarea ของ
KooiInc

1
โรงงาน ฉันเพิ่มสิ่งนี้ลงในอินพุตเดี่ยวเพราะฉันต้องการหลีกเลี่ยง <enter> จากการส่งแบบฟอร์ม มีปุ่มเพื่อทำการค้นหาภายในและปรับปรุงการใช้งานจริง
Foxinni

1
ปัญหาอย่างหนึ่งของวิธีนี้ (การใช้ฟังก์ชั่นนี้กับตัวจัดการเหตุการณ์บนแบบฟอร์มโดยรวม) คือมันยังป้องกันไม่ให้ผู้เข้าร่วมเกิดขึ้นใน textareas ที่อยู่ในแบบฟอร์มด้วย
Lonnie Best

1
@ LonnieBest: ขอบคุณที่สังเกต คุณได้อ่านความคิดเห็นของฉันในคำตอบนี้ (ดูด้านบน) ใช่ไหม? อย่างไรก็ตามฉันแก้ไขคำตอบนี้ค่อนข้างเก่า
KooiInc

1
@Jonathan: คุณสามารถแนบ handler เข้ากับช่องอินพุตเดี่ยวหรือ div บางอันมีชุดของ input field (แต่ไม่ใช่ปุ่ม) แทนรูปแบบทั้งหมด
KooiInc

57

นี่คือตัวจัดการ jQuery ที่สามารถใช้เพื่อหยุดป้อนการส่งและยังหยุดปุ่ม backspace -> back การจับคู่ (keyCode: selectorString) ในวัตถุ "keyStop" ถูกใช้เพื่อจับคู่โหนดที่ไม่ควรเริ่มการทำงานเริ่มต้น

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

นี่คือรหัสขึ้นอยู่กับคุณที่จะคิดเกี่ยวกับการช่วยการเข้าถึงและทำไมคุณถึงต้องการทำเช่นนี้!

$(function(){
 var keyStop = {
   8: ":not(input:text, textarea, input:file, input:password)", // stop backspace = back
   13: "input:text, input:password", // stop enter = submit 

   end: null
 };
 $(document).bind("keydown", function(event){
  var selector = keyStop[event.which];

  if(selector !== undefined && $(event.target).is(selector)) {
      event.preventDefault(); //stop event
  }
  return true;
 });
});

12
ด้วยวิธีที่ง่ายที่สุด: $ ("# myinput"). keydown (function (e) {if (e.which == 13) e.preventDefault ();}); กุญแจสำคัญคือการใช้ "keydown" และ event.preventDefault () พร้อมกัน ไม่สามารถใช้งานได้กับ "keyup"
lepe

นี่เป็นข้อได้เปรียบเหนือโซลูชันอื่นซึ่งบล็อกคีย์ 13 ที่การแนะนำอัตโนมัติของเบราว์เซอร์จะทำงานได้อย่างต่อเนื่อง
jsalvata

52

เพียงแค่คืนค่าเท็จจากตัวจัดการ onsubmit

<form onsubmit="return false;">

หรือถ้าคุณต้องการจัดการกลาง

<script>
var submitHandler = function() {
  // do stuff
  return false;
}
</script>
<form onsubmit="return submitHandler()">

5
นี่น่าจะเป็นคำตอบที่ง่ายที่สุด ฉันลองบน Google Chrome แล้วก็ใช้งานได้ดี คุณเคยทดสอบสิ่งนี้ในทุกเบราว์เซอร์หรือไม่?
styfle

22
นี่ไม่ใช่ความคิดที่ดีถ้าคุณต้องการให้แบบฟอร์มของคุณถูกส่งโดยการกดsubmitปุ่ม
AliBZ

13
ใช้งานไม่ได้เพราะปุ่มส่งไม่ส่งแบบฟอร์มอีกต่อไป
paullb

39
@Paul สิ่งนี้ได้รับ 38 upvotes อย่างไร การหยุด<form>ส่งไม่ได้เลยคือการโยนลูกออกไปพร้อมกับอาบน้ำ
Pacerier

8
@Pacerier ในบริบทของ SPA คุณมักจะต้องการจัดการกับการส่งแบบฟอร์มด้วยตนเอง การหยุดเบราว์เซอร์จากการส่งแบบฟอร์ม (และรีเฟรชหน้าซึ่งรีสตาร์ทแอพพลิเคชั่น) มักจะสมเหตุสมผลในกรณีนี้
นาธานเพื่อน

44
//Turn off submit on "Enter" key

$("form").bind("keypress", function (e) {
    if (e.keyCode == 13) {
        $("#btnSearch").attr('value');
        //add more buttons here
        return false;
    }
});

5
มันใช้งานได้ดี e.preventDefault()มากกว่าreturn falseจะบรรลุเป้าหมายเดียวกัน แต่อนุญาตให้เหตุการณ์เข้าถึงตัวจัดการในองค์ประกอบหลัก การกระทำเริ่มต้น (การสรุปฟอร์ม) จะยังคงได้รับการป้องกัน
willscripted

24

คุณจะต้องเรียกใช้ฟังก์ชั่นนี้ซึ่งเพียงแค่จะยกเลิกพฤติกรรมการส่งเริ่มต้นของแบบฟอร์ม คุณสามารถแนบเข้ากับช่องหรือเหตุการณ์ใดก็ได้

function doNothing() {  
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
    if( keyCode == 13 ) {


    if(!e) var e = window.event;

    e.cancelBubble = true;
    e.returnValue = false;

    if (e.stopPropagation) {
        e.stopPropagation();
        e.preventDefault();
    }
}

2
e ควรเป็นอาร์กิวเมนต์แล้วคุณควรตรวจสอบ window.event นอกจากนี้คุณควรได้รับรหัสจากเหตุการณ์ ในที่สุดคุณควรกลับเท็จ
ntownsend

9
คุณช่วยอธิบายตำแหน่งและวิธีเรียกใช้ฟังก์ชันนี้ได้อย่างไร
mydoghasworms

17

ปุ่ม ENTER เพียงเปิดใช้งานปุ่มส่งเริ่มต้นของแบบฟอร์มซึ่งจะเป็นปุ่มแรก

<input type="submit" />

เบราว์เซอร์พบภายในแบบฟอร์ม

ดังนั้นจึงไม่มีปุ่มส่ง แต่มีบางอย่างที่เหมือนกัน

<input type="button" value="Submit" onclick="submitform()" /> 

แก้ไข : เพื่อตอบสนองต่อการอภิปรายในความคิดเห็น:

วิธีนี้ใช้ไม่ได้หากคุณมีช่องข้อความเพียงช่องเดียว - แต่นั่นอาจเป็นพฤติกรรมที่ต้องการในกรณีนั้น

ปัญหาอื่น ๆ คือสิ่งนี้อาศัย Javascript ในการส่งแบบฟอร์ม นี่อาจเป็นปัญหาจากมุมมองการช่วยสำหรับการเข้าถึง นี้สามารถแก้ไขได้โดยการเขียน<input type='button'/>ด้วย JavaScript และจากนั้นใส่<input type='submit' />ภายใน<noscript>แท็ก ข้อเสียของวิธีนี้คือสำหรับเบราว์เซอร์ที่ปิดใช้งานจาวาสคริปต์คุณจะมีการส่งแบบฟอร์มใน ENTER มันขึ้นอยู่กับ OP เพื่อตัดสินใจว่าพฤติกรรมที่ต้องการในกรณีนี้คืออะไร

ฉันรู้ว่าไม่มีวิธีการทำเช่นนี้โดยไม่เรียกใช้จาวาสคริปต์เลย


แปลกนี่ใช้ไม่ได้กับ Firefox ถ้ามีเพียงช่องเดียว
DanSingerman

5
แย่มากสำหรับการเข้าถึง? อาจจะ. อย่างไรก็ตามมันจะตอบคำถามของคนที่แต่งตัวประหลาดซึ่งเป็นสิ่งที่สำหรับ ... บางทีการแก้ไขคำตอบเพื่อชี้ให้เห็นว่าปัญหาการเข้าถึงเป็นประนีประนอมที่ดี?
Neil Barnwell

1
@bince - อาจเป็นคำถามที่สมควรได้รับ -1 เนื่องจากการเข้าถึงได้ง่าย แต่คำตอบนี้ถูกต้องสำหรับคำถามหรือไม่ อย่าคิดอย่างนั้น นอกจากนี้ยังมีกรณีการใช้ที่ถูกต้องที่คุณต้องการทำเช่นนี้
DanSingerman

คุณไม่จำเป็นต้องทำแบบฟอร์มที่เป็นไปไม่ได้ที่จะส่งโดยไม่ใช้ JavaScript ใช่มั้ย นั่นคือถ้ามันทำงานแม้ว่าจะไม่ได้เพราะเบราว์เซอร์จะส่งแบบฟอร์มที่ไม่มีปุ่มส่ง
bobince

2
ทดสอบในบรรดาเหล่านั้นรวมถึง Opera ด้วยการป้อนข้อความเดียวและปุ่มอินพุตหนึ่งปุ่ม: ทั้งหมดยังคงส่งแบบฟอร์มบน Enter เห็นได้ชัดว่าคุณต้องใช้ JavaScript เพื่อ 'แก้ไข' ปัญหาการป้อน แต่เคล็ดลับคือการทำในขณะที่ไม่ทำให้หน้าไม่สามารถใช้งานได้อย่างสมบูรณ์โดยที่ JS ไม่พร้อมใช้งาน
bobince

12

คำตอบสั้น ๆ ใน Javascript ล้วนคือ:

<script type="text/javascript">
    window.addEventListener('keydown', function(e) {
        if (e.keyIdentifier == 'U+000A' || e.keyIdentifier == 'Enter' || e.keyCode == 13) {
            if (e.target.nodeName == 'INPUT' && e.target.type == 'text') {
                e.preventDefault();
                return false;
            }
        }
    }, true);
</script>

สิ่งนี้จะปิดใช้งานการดำเนินการกดปุ่ม "Enter" สำหรับการป้อนข้อมูล type = 'text' ผู้เข้าชมยังคงสามารถใช้คีย์ "Enter" ทั่วทั้งเว็บไซต์

หากคุณต้องการปิดการใช้งาน "Enter" สำหรับการกระทำอื่น ๆ เช่นกันคุณสามารถเพิ่ม console.log (e); สำหรับจุดประสงค์ในการทดสอบของคุณและกด F12 ในโครเมี่ยมไปที่แท็บ "คอนโซล" และกด "backspace" บนหน้าเว็บและดูข้างในเพื่อดูว่ามีการคืนค่าใดบ้างจากนั้นคุณสามารถกำหนดเป้าหมายพารามิเตอร์เหล่านั้นทั้งหมด ด้านบนเพื่อให้เหมาะกับความต้องการของคุณสำหรับ"e.target.nodeName" , "e.target.type"และอีกมากมาย ...

ดูคำตอบโดยละเอียดของฉันสำหรับคำถามที่คล้ายกันที่นี่


3
e.target.nodeName === 'INPUT' && e.target.type !== 'textarea'อันที่จริงมันควรจะเป็น ด้วยรหัสที่ระบุจะอนุญาตให้ส่งแบบฟอร์มหากมีการเน้นวิทยุหรือช่องทำเครื่องหมาย
afnpires

1
นี่คือทางออกที่มีประสิทธิภาพและเป็นมิตรกับทรัพยากรมากที่สุด ขอบคุณ @AlexandrePires ถึง! นี่คือสคริปต์ทำงานแบบเต็มของฉัน: stackoverflow.com/a/40686327/1589669
eapo

1
ทางออกเดียวที่ทำงาน; อย่างน้อยในสถานการณ์ของฉัน
hex494D49

9

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

$(document).ready(function() 
{
    $('form.prevent_auto_submit input,form.prevent_auto_submit select').keypress(function(event) 
    { 
        if (event.keyCode == 13)
        {
            event.preventDefault();
            $(this).trigger("change");
        }
    });
});

7

ฉันเคยทำมันด้วยปุ่มกดแบบตัวจัดการเหมือนดังที่ได้กล่าวมาแล้วในอดีต ปุ่ม Enter เป็นเพียงการกระตุ้นปุ่มแรกที่ไม่ได้ปิดการใช้งานบนแบบฟอร์มดังนั้นที่จริงแล้วสิ่งที่จำเป็นต้องมีก็คือการสกัดกั้นปุ่มที่พยายามส่ง:

<form>
  <div style="display: none;">
    <input type="submit" name="prevent-enter-submit" onclick="return false;">
  </div>
  <!-- rest of your form markup -->
</form>

แค่นั้นแหละ. การกดคีย์จะได้รับการจัดการตามปกติโดยเบราว์เซอร์ / ฟิลด์ / ฯลฯ หากมีการเรียกใช้ตรรกะการป้อน - ส่งจากนั้นเบราว์เซอร์จะพบว่าปุ่มส่งที่ซ่อนอยู่และเรียกมัน และตัวจัดการ javascript จะป้องกันการส่ง


1
ปกติฉันไม่ชอบแฮ็ก แต่อันนี้มีประสิทธิภาพจริงๆ
TechWisdom

1
การลบ div และเพียงแค่ใส่ attr hiddenบนอินพุตจะสั้นลง สับดี :)
Nik

5

ฉันใช้เวลาทำเบราว์เซอร์นี้เป็น IE8,9,10, Opera 9+, Firefox 23, Safari (PC) และ Safari (MAC)

ตัวอย่าง JSFiddle: http://jsfiddle.net/greatbigmassive/ZyeHe/

รหัสฐาน - เรียกใช้ฟังก์ชั่นนี้ผ่าน "onkeypress" ที่แนบมากับแบบฟอร์มของคุณและส่ง "window.event" ลงไป

function stopEnterSubmitting(e) {
    if (e.keyCode == 13) {
        var src = e.srcElement || e.target;
        if (src.tagName.toLowerCase() != "textarea") {
            if (e.preventDefault) {
                e.preventDefault();
            } else {
                e.returnValue = false;
            }
        }
    }
}

4
stopSubmitOnEnter (e) {
  var eve = e || window.event;
  var keycode = eve.keyCode || eve.which || eve.charCode;

  if (keycode == 13) {
    eve.cancelBubble = true;
    eve.returnValue = false;

    if (eve.stopPropagation) {   
      eve.stopPropagation();
      eve.preventDefault();
    }

    return false;
  }
}

จากนั้นในแบบฟอร์มของคุณ:

<form id="foo" onkeypress="stopSubmitOnEnter(e);">

แม้ว่ามันจะดีกว่าถ้าคุณไม่ได้ใช้ JavaScript ที่สร้างความรำคาญ


ฉันชอบรุ่นนี้เพราะสามารถอ่านได้มากกว่า @hash แม้ว่าปัญหาหนึ่งคุณควรส่งคืนค่าเท็จในบล็อค "if (keycode == 13)" ในขณะที่คุณมีมันฟังก์ชั่นนี้จะป้องกันการป้อนข้อมูลแป้นพิมพ์ใด ๆ ในสนาม รุ่นของ @ hash รวมถึง e.keyCode, e.which และ e.charCode ... ไม่แน่ใจว่า e.charCode มีความสำคัญ แต่ฉันใส่ไว้ในนั้น: "var keycode = eve.keyCode || eve.which || eve.charCode;"
Jack Senechal

ขอบคุณแจ็ค charCodeฉันแก้ไขคำตอบเพื่อตรวจสอบ ฉันยังย้ายreturn falseข้างใน if-block จับดี.
ntownsend

3

ในกรณีของฉัน jQuery JavaScript นี้แก้ไขปัญหาได้

jQuery(function() {
            jQuery("form.myform").submit(function(event) {
               event.preventDefault();
               return false;
            });
}

เยี่ยมมากขอบคุณ @Kirby! เมื่อถึงตอนนี้คีย์ Enter จะถูกปิดการใช้งานในแบบฟอร์มคุณจะเปิดใช้คีย์ Enter สำหรับ<input>ฟิลด์ทั้งหมดในฟอร์มได้อย่างไร
เอียนแคมป์เบล

3

การป้องกัน "ENTER" เพื่อส่งแบบฟอร์มอาจทำให้ผู้ใช้ของคุณไม่สะดวก ดังนั้นจะดีกว่าถ้าคุณทำตามขั้นตอนด้านล่าง:

เขียนเหตุการณ์ 'onSubmit' ในแท็กแบบฟอร์มของคุณ:

<form name="formname" id="formId" onSubmit="return testSubmit()" ...>
 ....
 ....
 ....
</form>

เขียนฟังก์ชัน Javascript ดังต่อไปนี้:

function testSubmit(){
  if(jQuery("#formId").valid())
      {
        return true;
      }
       return false;

     } 

     (OR)

หากคุณต้องการป้องกันการส่งแบบฟอร์มเมื่อกดปุ่ม Enter คุณสามารถเขียนฟังก์ชันต่อไปนี้ใน javascript:

    $(document).ready(function() {
          $(window).keydown(function(event){
          if(event.keyCode == 13) {
               event.preventDefault();
               return false;
              }
           });
         });

ขอบคุณ


3

เพิ่มแท็กนี้ในแบบฟอร์มของคุณ - onsubmit="return false;" จากนั้นคุณสามารถส่งแบบฟอร์มของคุณได้ด้วยฟังก์ชั่น JavaScript เท่านั้น


OP (เช่นเดียวกับคนส่วนใหญ่ที่ถูกกัดด้วยคุณลักษณะของเบราว์เซอร์นี้) อาจต้องการอนุญาตให้ส่งด้วยการคลิกเมาส์ซึ่งวิธีการ (แนะนำที่น่าเสียดายบ่อยครั้ง) ก็จะปิดการใช้งานเช่นกัน ไม่มีวิธีที่ดีในการแก้ปัญหานี้ แต่เช่นคำตอบข้างต้น (ในขณะนี้) จากอดัมทำงานได้ดีขึ้น
Sz.

3

เพื่อป้องกันการส่งแบบฟอร์มเมื่อกดenterในtextareaหรือinputฟิลด์ให้ตรวจสอบเหตุการณ์ส่งเพื่อค้นหาประเภทขององค์ประกอบที่ส่งเหตุการณ์

ตัวอย่างที่ 1

HTML

<button type="submit" form="my-form">Submit</button>
<form id="my-form">
...
</form>

jQuery

$(document).on('submit', 'form', function(e) {
    if (e.delegateTarget.activeElement.type!=="submit") {
        e.preventDefault();
    }
});

ทางออกที่ดีกว่าคือถ้าคุณไม่มีปุ่มส่งและคุณเริ่มต้นเหตุการณ์ด้วยปุ่มปกติ มันจะดีกว่าเพราะในตัวอย่างแรกที่ 2 ส่งเหตุการณ์ถูกไล่ออก แต่ในตัวอย่างที่สองมีเพียง 1 เหตุการณ์เท่านั้นที่ถูกไล่ออก

ตัวอย่างที่ 2

HTML

<button type="button" onclick="$('#my-form').submit();">Submit</button>
<form id="my-form">
...
</form>

jQuery

$(document).on('submit', 'form', function(e) {
    if (e.delegateTarget.activeElement.localName!=="button") {
        e.preventDefault();
    }
});

3

คุณจะพบสิ่งนี้ง่ายขึ้นและมีประโยชน์มากขึ้น: D

$(document).on('submit', 'form', function(e){
    /* on form submit find the trigger */
    if( $(e.delegateTarget.activeElement).not('input, textarea').length == 0 ){
        /* if the trigger is not between selectors list, return super false */
        e.preventDefault();
        return false;
    } 
});


2

โปรดตรวจสอบบทความนี้จะป้องกันการกดปุ่ม ENTER เพื่อส่งแบบฟอร์มบนเว็บได้อย่างไร

$(“.pc_prevent_submit”).ready(function() {
  $(window).keydown(function(event) {
    if (event.keyCode == 13) {
      event.preventDefault();
      return false;
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class=”pc_prevent_submit” action=”” method=”post”>
  <input type=”text” name=”username”>
  <input type=”password” name=”userpassword”>
  <input type=”submit” value=”submit”>
</form>


1

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


ขึ้นอยู่กับส่วนควบคุม;) ใน textarea มันแค่ย้ายไปที่บรรทัดถัดไป ดังนั้นการจับเหตุการณ์ปุ่มกดทั้งหมด 'ป้อน' จึงไม่ใช่ความคิดที่ดี
ฆ่า

อาจเป็นไปได้ แต่ในกรณีนั้นแบบฟอร์มจะมีเหตุการณ์ keydown หรือไม่
Neil Barnwell

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

1

ลิงก์นี้มอบโซลูชันที่ใช้งานได้สำหรับฉันใน Chrome, FF และ IE9 รวมถึงโปรแกรมจำลองสำหรับ IE7 และ 8 ที่มาพร้อมกับเครื่องมือสำหรับนักพัฒนาของ IE9 (F12)

http://webcheatsheet.com/javascript/disable_enter_key.php


ในกรณีที่ลิงค์เสียให้เพิ่มรหัสนี้ในพื้นที่ส่วนหัวของหน้า <script type="text/javascript"> function stopRKey(evt) { var evt = (evt) ? evt : ((event) ? event : null); var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); if ((evt.keyCode == 13) && (node.type=="text")) {return false;} } document.onkeypress = stopRKey; </script>
Miaka

1

อีกวิธีหนึ่งคือการใส่ปุ่มส่งอินพุตต่อท้ายแบบฟอร์มเฉพาะเมื่อมันควรจะถูกส่งและแทนที่ด้วย div ง่ายๆในระหว่างการกรอกแบบฟอร์ม


1

เพียงเพิ่มแอททริบิวนี้ลงในแท็ก FORM ของคุณ:

onsubmit="return gbCanSubmit;"

จากนั้นในแท็ก SCRIPT ของคุณเพิ่มสิ่งนี้:

var gbCanSubmit = false;

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

function submitClick(){

  // error handler code goes here and return false if bad data

  // okay, proceed...
  gbCanSubmit = true;
  $('#myform').submit(); // jQuery example

}

1

ฉันเจอสิ่งนี้ด้วยตัวเองเพราะฉันมีปุ่มส่งหลายปุ่มที่มีค่า 'ชื่อ' ที่แตกต่างกันดังนั้นเมื่อส่งพวกเขาจะทำสิ่งต่าง ๆ ในไฟล์ php เดียวกัน enter/ returnปุ่มพักนี้เป็นค่าเหล่านี้จะไม่ส่ง ดังนั้นฉันจึงคิดว่าปุ่มenter/ returnเปิดใช้งานปุ่มส่งครั้งแรกในแบบฟอร์มหรือไม่ ด้วยวิธีนี้คุณสามารถมีปุ่มส่ง 'vanilla' ที่ซ่อนอยู่หรือมีค่า 'ชื่อ' ที่ส่งคืนไฟล์ php ที่กำลังเรียกใช้งานกลับไปที่หน้าเว็บพร้อมกับแบบฟอร์มในนั้น หรือมิฉะนั้นค่าเริ่มต้น (ซ่อนอยู่) 'ชื่อ' ค่าที่กดปุ่มเปิดใช้งานและปุ่มส่งจะเขียนทับด้วยค่า 'ชื่อ' ของตัวเอง แค่ความคิด


1

เกี่ยวกับ:

<script>
function isok(e) {
  var name = e.explicitOriginalTarget.name;
  if (name == "button") {
    return true
  }
  return false;
}
</script>
<form onsubmit="return isok(event);">
<input type="text" name="serial"/>
<input type="submit" name="button" value="Create Thing"/>
</form>

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


0

สิ่งนี้ใช้ได้สำหรับฉัน
onkeydown = "return! (event.keyCode == 13)"

    <form id="form1" runat="server" onkeydown="return !(event.keyCode==13)">

   </form>

1
หากคุณมี textarea คุณไม่สามารถข้ามไปยังบรรทัดถัดไปที่ป้อนในรูปแบบเดียวกัน
Aamir Afridi

0

นี่คือวิธีที่ฉันจะทำ:

window.addEventListener('keydown', function(event)
{
    if (event.key === "Enter")
    {
        if(event.target.type !== 'submit')
        {
            event.preventDefault();
            return false;
        }
    }
}

-1

ใส่ลงในไฟล์ภายนอกจาวาสคริปต์

   (function ($) {
 $(window).keydown(function (event) {  

    if (event.keyCode == 13) {

        return false;
    }
});

 })(jQuery);

หรือบางส่วนภายในแท็กเนื้อหา

<script>


$(document).ready(function() {
    $(window).keydown(function(event) {
        alert(1);

        if(event.keyCode == 13) {

            return false;
        }
    });
});

</script>

-2

ฉันมีปัญหาเดียวกัน (แบบฟอร์มที่มีช่องข้อความจำนวนมากและผู้ใช้ที่ไม่มีทักษะ)

ฉันแก้ไขมันด้วยวิธีนี้:

function chkSubmit() {
    if (window.confirm('Do you want to store the data?')) {
        return true;
    } else {
        // some code to focus on a specific field
        return false;
    }
}

ใช้สิ่งนี้ในรหัส HTML:

<form
    action="go.php" 
    method="post"
    accept-charset="utf-8"  
    enctype="multipart/form-data"
    onsubmit="return chkSubmit()"
>

ด้วยวิธีนี้ENTERคีย์จะทำงานได้ตามแผนที่วางไว้ แต่จำเป็นต้องมีการยืนยัน ( ENTERแตะครั้งที่สองโดยปกติ)

ฉันออกไปหาผู้อ่านเพื่อหาสคริปต์ที่ส่งผู้ใช้ในสาขาที่เขากดENTERถ้าเขาตัดสินใจที่จะอยู่ในแบบฟอร์ม

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