ส่งแบบฟอร์มใน 'Enter' ด้วย jQuery หรือไม่


427

ฉันมีรูปแบบการเข้าสู่ระบบที่ไม่ได้มาตรฐาน - ฟิลด์ข้อความอีเมลฟิลด์รหัสผ่านและปุ่มส่งในโครงการ AIR ที่ใช้ HTML / jQuery เมื่อฉันกด Enter บนแบบฟอร์มเนื้อหาทั้งหมดของแบบฟอร์มจะหายไป แต่ไม่ได้ส่งแบบฟอร์ม ไม่มีใครรู้ว่านี่เป็นปัญหาของ Webkit (Adobe AIR ใช้ Webkit สำหรับ HTML) หรือว่าฉันทำอะไรผิดพลาดหรือไม่?

ฉันเหนื่อย:

$('.input').keypress(function (e) {
  if (e.which == 13) {
    $('form#login').submit();
  }
});

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


3
คุณมีแอตทริบิวต์ class = "input" ใน <input ... ของคุณหรือไม่ ดูเหมือนว่ามันควรจะเป็น $ ('อินพุต') ปุ่มกด ...
NexusRex

คลาสถูกสร้างโดยทางโปรแกรมโดย CMS อย่างไรก็ตามนอกเหนือจากนั้นการกำหนดให้เป็น $ ('อินพุท') จะส่งผลต่ออินพุตทุกหน้าในรีเบคก้าไม่ว่าฉันจะต้องการพฤติกรรมหรือไม่ก็ตาม ขอโทษที่ทำให้คุณอ่อนไหว
be hollenbeck

15
ความรู้สึกไม่พอใจในสิ่งที่น้อยที่สุด แค่คิดว่ามันอาจเป็นการกำกับดูแลที่นำไปสู่ปัญหา ดำเนินการต่อไป
NexusRex

1
FYI: คำตอบที่คุณยอมรับไม่ถูกต้องทั้งหมด อ้างถึงคำตอบของฉันด้านล่าง
NoBrainer

คำตอบ:


399
$('.input').keypress(function (e) {
  if (e.which == 13) {
    $('form#login').submit();
    return false;    //<---- Add this line
  }
});

ลองดูคำตอบ stackoverflow นี้: event.preventDefault () กับ return false

เป็นหลัก "กลับเท็จ" เป็นเช่นเดียวกับการโทรและe.preventDefaulte.stopPropagation()


3
หมายเหตุพวกเขาไม่เหมือนกัน IE8 ไม่มี e.preventDefault สำหรับ IE8 ให้ใช้ event.returnValue = false
mbokil

8
@mbokil ยกเว้นว่าเมื่อใช้ jQuery มันจะเหมือนกันใน IE8 และ IE7 และ IE6
Kevin B

หากคุณต้องการพิมพ์ครั้งแรกในช่องใส่ให้ใส่ "return false;" ภายในคำสั่ง if
Juni Brosas

173

นอกเหนือจากการคืนค่าเท็จตามที่ Jason Cohen กล่าวถึง คุณอาจต้องป้องกันการผิดเริ่มต้นด้วย

e.preventDefault();

13
ตามที่ @ NoBrainer กล่าวว่านี่เป็นสิ่งที่ผิด: return falseในเหตุการณ์ที่จัดการโดย jQuery จะโทรหา e.preventDefault () โดยอัตโนมัติ
Riccardo Galli

83

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

    $('.input').keypress(function(e) {
        if(e.which == 13) {
            jQuery(this).blur();
            jQuery('#submit').focus().click();
        }
    });

หมายเหตุ: jQuery ('# submit'). focus ()ทำให้ปุ่มเคลื่อนไหวเมื่อกด Enter


2
ใช้งานได้ดี แต่ฉันต้องเพิ่ม "return false;" เพื่อป้องกันการส่งแบบฟอร์มสองครั้ง
code90

การทำงาน | ดูผลลัพธ์จำนวนมากเช่นนี้ที่พูดถึงทริกเกอร์, sendkey, ฯลฯ , doh, blah ... แต่นั่นเป็นสิ่งเดียวที่ใช้ได้กับฉันและส่งการคลิกเพียงปุ่มเดียว ไม่ส่ง () ดังนั้นเคล็ดลับคือโฟกัส (). คลิก () ฟังก์ชั่นในการ secuence ขอบคุณ.
m3nda

ใช้งานได้ แต่ฉันต้องใส่รหัสนี้ภายใต้: $ (document) .ready (function () {...
shasi kanth


30

มีเหตุผลใดบ้างที่คุณต้องขอและทดสอบคีย์ Enter?

คุณไม่สามารถเพิ่มก

<input type="submit" /> 

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

คุณยังสามารถใช้onsubmitเป็นแบบทดสอบเพื่อดูว่าแบบฟอร์มของคุณจะถูกส่งมา form.submit()แต่มันจะไม่ทำงานถ้าคุณโทร


1
เห็นด้วยอย่างสิ้นเชิง. การตั้งค่าของฉันจะใช้ฟังก์ชั่นดั้งเดิมของเบราว์เซอร์เสมอ (อินพุตจาก type = ส่งตามปกติตอบสนองต่อการกดปุ่ม Enter) แทนที่จะเพิ่มสคริปต์ kludged เพิ่มเติม ..
Aaron

1
ปัญหาคือจะเกิดอะไรขึ้นถ้าคุณทำสิ่ง ajax และไม่มี postback ที่แท้จริงไปยังเซิร์ฟเวอร์ แต่คุณต้องการให้ UI ทำงานตามที่ผู้ใช้คาดหวัง
devlord

แน่นอน ... ฉันมองข้ามreturn false;สิ่งทั้งหมด
devlord

14

นี่คือวิธีในการทำเช่นนี้เป็นปลั๊กอิน JQuery (ในกรณีที่คุณต้องการใช้ฟังก์ชันการทำงานอีกครั้ง):

$.fn.onEnterKey =
    function( closure ) {
        $(this).keypress(
            function( event ) {
                var code = event.keyCode ? event.keyCode : event.which;

                if (code == 13) {
                    closure();
                    return false;
                }
            } );
    }

ตอนนี้ถ้าคุณต้องการตกแต่ง<input>องค์ประกอบด้วยฟังก์ชั่นประเภทนี้มันง่ายเหมือนนี้:

$('#your-input-id').onEnterKey(
    function() {
        // Do stuff here
    } );

12

นอกจากนี้คุณยังสามารถเพิ่มonsubmit="return false"รหัสฟอร์มในหน้าเพื่อป้องกันพฤติกรรมเริ่มต้น

จากนั้นขอ ( .bindหรือ.live) submitเหตุการณ์ของฟอร์มไปยังฟังก์ชันใด ๆ ด้วย jQuery ในไฟล์ javascript

นี่คือตัวอย่างรหัสที่จะช่วย:

HTML

<form id="search_form" onsubmit="return false">
   <input type="text" id="search_field"/>
   <input type="button" id="search_btn" value="SEARCH"/>
</form>

Javascript + jQuery

$(document).ready(function() {

    $('#search_form').live("submit", function() {
        any_function()
    });
});

สิ่งนี้ทำงานได้ตั้งแต่ 2011-04-13 โดยมี Firefox 4.0 และ jQuery 1.4.3


มันไม่ทำงานใน Chrome จะส่งต่อไป
Marcelo Agimóvel

5

นี่คือรหัสของฉัน:

  $("#txtMessage").on( "keypress", function(event) {
    if (event.which == 13 && !event.shiftKey) {
        event.preventDefault();
        $("#frSendMessage").submit();
    }
    });

4

นอกจากนี้เพื่อรักษาความสามารถในการเข้าถึงคุณควรใช้สิ่งนี้เพื่อกำหนดรหัสของคุณ:

c = e.which ? e.which : e.keyCode;

if (c == 13) ...

3

เพียงเพิ่มเพื่อให้ใช้งานง่าย คุณสามารถสร้างแบบฟอร์มจากนั้นให้ซ่อนปุ่มส่ง:

ตัวอย่างเช่น:

<form action="submit.php" method="post">
Name : <input type="text" name="test">
<input type="submit" style="display: none;">
</form>

@cebirci และ Chrome รุ่นใดของคุณ? ฉันทดสอบจากแล็ปท็อปไปยังพีซีและรหัสของฉันก็ใช้งานได้ ลองดาวน์โหลด chrome ใหม่ล่าสุดก่อนทำเครื่องหมายคำตอบของฉัน
Joem Maranan

2

ฉันใช้ตอนนี้

$("form").submit(function(event){
...
}

ตอนแรกฉันเพิ่มตัวจัดการเหตุการณ์ในปุ่มส่งซึ่งทำให้เกิดข้อผิดพลาดสำหรับฉัน


1

ฉันพบว่าวันนี้เหตุการณ์ keypress ไม่ทำงานเมื่อกดปุ่ม Enter ดังนั้นคุณอาจต้องการเปลี่ยนเป็น keydown () หรือ keyup () แทน

สคริปต์ทดสอบของฉัน:

        $('.module input').keydown(function (e) {
            var keyCode = e.which;
            console.log("keydown ("+keyCode+")")
            if (keyCode == 13) {
                console.log("enter");
                return false;
            }
        });
        $('.module input').keyup(function (e) {
            var keyCode = e.which;
            console.log("keyup ("+keyCode+")")
            if (keyCode == 13) {
                console.log("enter");
                return false;
            }
        });
        $('.module input').keypress(function (e) {
            var keyCode = e.which;
            console.log("keypress ("+keyCode+")");
            if (keyCode == 13) {
                console.log("Enter");
                return false;
            }
        });

เอาต์พุตในคอนโซลเมื่อพิมพ์ "A Enter B" บนคีย์บอร์ด:

keydown (65)
keypress (97)
keyup (65)

keydown (13)
enter
keyup (13)
enter

keydown (66)
keypress (98)
keyup (66)

คุณเห็นตามลำดับที่สองว่า 'การกดปุ่ม' หายไป แต่การกดแป้นและการลงทะเบียนรหัสการกดปุ่ม '13' เป็นการกด / ปล่อย ตามเอกสาร jQuery ในฟังก์ชั่นปุ่มกด () :

Note: as the keypress event isn't covered by any official specification, the actual behavior encountered when using it may differ across browsers, browser versions, and platforms.

ทดสอบบน IE11 และ FF61 บนเซิร์ฟเวอร์ 2012 R2


0

ในรหัส HTML:

<form action="POST" onsubmit="ajax_submit();return false;">
    <b>First Name:</b> <input type="text" name="firstname" id="firstname">
    <br>
    <b>Last Name:</b> <input type="text" name="lastname" id="lastname">
    <br>
    <input type="submit" name="send" onclick="ajax_submit();">
</form>

ในรหัส Js:

function ajax_submit()
{
    $.ajax({
        url: "submit.php",
        type: "POST",
        data: {
            firstname: $("#firstname").val(),
            lastname: $("#lastname").val()
        },
        dataType: "JSON",
        success: function (jsonStr) {
            // another codes when result is success
        }
    });
}

1
โปรดอย่าโพสต์คำตอบที่เหมือนกันสำหรับคำถามหลายข้อ โพสต์คำตอบที่ดีหนึ่งข้อจากนั้นลงคะแนน / ตั้งค่าสถานะเพื่อปิดคำถามอื่น ๆ เป็นแบบซ้ำ หากคำถามไม่ซ้ำให้ปรับคำตอบของคำถาม
Paul Roub

@ PaulRoub คำตอบของฉันมีความแตกต่างกับคนอื่น
mghhgm

คำตอบนี้แตกต่างจากนี้หรือนี่อย่างไร
Paul Roub

@ PaulRoub ฉันมีปัญหานี้และค้นหา google ก่อนสำหรับสิ่งนี้ หน้านั้นพูดคุยเกี่ยวกับปัญหานี้ แต่ไม่ง่าย เมื่อฉันพบคำตอบที่ดีที่สุดฉันตัดสินใจแบ่งปันสิ่งนี้ในหน้านั้นพูดคุยเกี่ยวกับเพื่อช่วยผู้ใช้เมื่อค้นหาสิ่งนี้ดูคำตอบของฉันในบางหน้าคล้ายกับ stackoverflow
mghhgm

1
คำตอบนี้ไม่เกี่ยวข้องกับคำถามเลย
ZoltánSüle

-4

ลองสิ่งนี้:

var form = document.formname;

if($(form).length > 0)
{
    $(form).keypress(function (e){
        code = e.keyCode ? e.keyCode : e.which;
        if(code.toString() == 13) 
        {
             formsubmit();
        }
    })
}

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