วิธีการตรวจหาการกด Enter บนแป้นพิมพ์โดยใช้ jQuery


731

ฉันต้องการตรวจสอบว่าผู้ใช้กดEnterใช้ jQuery หรือไม่

เป็นไปได้อย่างไร? มันต้องมีปลั๊กอินหรือไม่?

แก้ไข: ดูเหมือนว่าฉันต้องใช้keypress()วิธีการ

ฉันต้องการที่จะรู้ว่าถ้าใครรู้ว่ามีปัญหาเบราว์เซอร์ที่มีคำสั่ง - เช่นมีปัญหาความเข้ากันได้เบราว์เซอร์ที่ฉันควรรู้เกี่ยวกับ?


ลิงค์เกี่ยวกับ. keypress () | jQuery API เอกสาร
ฮาอิม Evgi

5
หนึ่งในสิ่งที่ดีที่สุดในกรอบ Javascript ก็คือพวกเขาควรจะเข้ากันได้กับเบราว์เซอร์เริ่มต้น พวกเขาจัดการการตรวจสอบความเข้ากันได้ของเบราว์เซอร์เพื่อไม่ให้ผู้ใช้ ฉันไม่ได้อ่านซอร์สโค้ด JQuery แต่ฉันสงสัยว่าการทำงานของปุ่มกดนั้นแตกต่างกันในแง่นั้น
miek

2
ปัญหาความเข้ากันได้ของเบราว์เซอร์เพียงอย่างเดียวคือคุณควรใช้ e.which แทน e.keyCode เพื่อตรวจจับรหัส ascii
Daniel

คำตอบ:


1330

ประเด็นทั้งหมดของ jQuery คือคุณไม่ต้องกังวลกับความแตกต่างของเบราว์เซอร์ ฉันค่อนข้างมั่นใจว่าคุณสามารถไปได้อย่างปลอดภัยด้วยenterการเป็น 13 ในเบราว์เซอร์ทั้งหมด ดังนั้นในใจคุณสามารถทำสิ่งนี้:

$(document).on('keypress',function(e) {
    if(e.which == 13) {
        alert('You pressed enter!');
    }
});

7
ฉันกำลังเชื่อมโยงกับสิ่งนี้เพราะฉันอ่านและทิ้งรอยขีดข่วนไว้เหนือเหตุที่ปุ่มกดไม่ทำงานกับ IE (ไม่ผูกกับ$(window)ภายใต้ IE) quirksmode.org/dom/events/keys.html
ไม่ระบุตัวตน

17
e.keyCode ไม่ใช่ cross browser 100% ใช้ e.which แทนดังที่แสดงด้านล่าง
Daniel

15
จากเอกสาร jQuery "คุณสมบัติ event.which normalizes event.keyCode และ event.charCode ขอแนะนำให้ดูเหตุการณ์ซึ่งสำหรับการป้อนคีย์ของแป้นพิมพ์"
Riccardo Galli

20
$ (เอกสาร) .on ('keypress', ฟังก์ชัน (e) {
user956584

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

129

ฉันเขียนปลั๊กอินขนาดเล็กเพื่อให้ง่ายต่อการผูกเหตุการณ์ "เมื่อกดปุ่ม Enter":

$.fn.enterKey = function (fnc) {
    return this.each(function () {
        $(this).keypress(function (ev) {
            var keycode = (ev.keyCode ? ev.keyCode : ev.which);
            if (keycode == '13') {
                fnc.call(this, ev);
            }
        })
    })
}

การใช้งาน:

$("#input").enterKey(function () {
    alert('Enter!');
})

สิ่งนี้ใช้ไม่ได้สำหรับฉัน (ฉัน#inputอยู่บน<input>สนาม)
RápliAndrás

1
ถ้าองค์ประกอบ #input จะเป็นแบบไดนามิก
Jigar7521

@plpljanjan ไม่แน่ใจว่าคุณหมายถึงอะไรโดย "มอบหมาย"
Andrea

$("#input").on("someevent","someselector",function () {})
mplungjan

62

ฉันไม่สามารถรับรหัสที่โพสต์โดย @Paolo Bergantino ให้ทำงานได้ แต่เมื่อฉันเปลี่ยนเป็น$(document)และe.whichแทนที่จะe.keyCodeพบว่าฉันทำงานผิดพลาด

$(document).keypress(function(e) {
    if(e.which == 13) {
        alert('You pressed enter!');
    }
});

ลิงก์ไปยังตัวอย่างบน JS Bin


สำหรับฉัน e ซึ่งไม่ได้ทำงานกับ IE มันใช้งานได้สำหรับคนอื่น ๆ ?
Umesh Rajbhandari

IE เวอร์ชันใด ทำงานได้ดีสำหรับฉันใน IE7
Ian Roke

จากเอกสาร jQuery "คุณสมบัติ event.which normalizes event.keyCode และ event.charCode ขอแนะนำให้ดูเหตุการณ์ซึ่งสำหรับการป้อนคีย์ของแป้นพิมพ์"
Riccardo Galli

52

ฉันพบสิ่งนี้เพื่อเข้ากันได้กับเบราว์เซอร์เพิ่มเติม:

$(document).keypress(function(event) {
    var keycode = event.keyCode || event.which;
    if(keycode == '13') {
        alert('You pressed a "enter" key in somewhere');    
    }
});

1
Ternary ของคุณสามารถย่อให้เป็น: var keycode = event.keyCode || event.which;
ปืนพก -pete

29

คุณสามารถทำได้โดยใช้ตัวจัดการเหตุการณ์ jquery 'keydown'

   $( "#start" ).on( "keydown", function(event) {
      if(event.which == 13) 
         alert("Entered!");
    });


9

ฉันใช้เวลาแก้ปัญหานี้ฉันหวังว่ามันจะช่วยให้ใครบางคน

$(document).ready(function(){

  $('#loginforms').keypress(function(e) {
    if (e.which == 13) {
    //e.preventDefault();
    alert('login pressed');
    }
  });

 $('#signupforms').keypress(function(e) {
    if (e.which == 13) {
      //e.preventDefault();
      alert('register');
    }
  });

});


7

ส่วนขยายเล็กน้อยของคำตอบของ Andrea ด้านบนทำให้วิธีการช่วยเหลือมีประโยชน์มากขึ้นเมื่อคุณอาจต้องการจับภาพการป้อนที่แก้ไข (เช่น ctrl-enter หรือ shift-enter) ตัวอย่างเช่นตัวแปรนี้อนุญาตให้มีการผูกเช่น:

$('textarea').enterKey(function() {$(this).closest('form').submit(); }, 'ctrl')

เพื่อส่งแบบฟอร์มเมื่อผู้ใช้กด ctrl-enter โดยมุ่งเน้นที่ textarea ของแบบฟอร์มนั้น

$.fn.enterKey = function (fnc, mod) {
    return this.each(function () {
        $(this).keypress(function (ev) {
            var keycode = (ev.keyCode ? ev.keyCode : ev.which);
            if ((keycode == '13' || keycode == '10') && (!mod || ev[mod + 'Key'])) {
                fnc.call(this, ev);
            }
        })
    })
}

(ดูCtrl + Enter jQuery ใน TEXTAREA )


4

ในบางกรณีคุณอาจต้องกดENTERปุ่มสำหรับพื้นที่บางส่วนของหน้า แต่ไม่ใช่สำหรับพื้นที่อื่น ๆ ของหน้าเช่นหน้าด้านล่างที่มีส่วนหัวที่ <div>มีฟิลด์SEARCH

ฉันใช้เวลาเล็กน้อยในการหาวิธีการทำสิ่งนี้และฉันกำลังโพสต์ตัวอย่างง่ายๆ แต่สมบูรณ์แบบไว้ที่นี่สำหรับชุมชน

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Test Script</title>
  <script src="/lib/js/jquery-1.7.1.min.js" type="text/javascript"></script>
  <script type="text/javascript">
    $('.container .content input').keypress(function (event) {
      if (event.keyCode == 10 || event.keyCode == 13) {
        alert('Form Submission needs to occur using the Submit button.');
        event.preventDefault();
      }
    });
  </script>
</head>
  <body>
    <div class="container">
      <div class="header">
        <div class="FileSearch">
          <!-- Other HTML here -->
        </div>
      </div>
      <div class="content">
        <form id="testInput" action="#" method="post">
        <input type="text" name="text1" />
        <input type="text" name="text2" />
        <input type="text" name="text3" />
        <input type="submit" name="Submit" value="Submit" />
        </form>
      </div>
    </div>
  </body>
</html>

ลิงก์ไปยังสนามเด็กเล่น JSFiddle : [Submit]ปุ่มไม่ได้ทำอะไร แต่การกดENTERจากหนึ่งในตัวควบคุมกล่องข้อความจะไม่ส่งแบบฟอร์ม



2

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

$(document).keydown(function(event) {
  if (event.keyCode || event.which === 13) {
    // Cancel the default action, if needed
    event.preventDefault();
    //call function, trigger events and everything tou want to dd . ex : Trigger the button element with a click
    $("#btn").trigger('click');
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<button id="btn" onclick="console.log('Button Pressed.')">&nbsp</button>

ฉันหวังว่ามันจะมีประโยชน์!


ที่จะต้องทราบเหตุผลที่ทำให้keypressไม่ได้อยู่ในสเป็ก (อีกต่อไป) ก็คือมันถูกคัดค้าน ( MDN )
YellowAfterlife

ดังนั้น l แก้ไข ... tnx <3
Zoe_NS

0

วิธีง่าย ๆ ในการตรวจสอบว่าผู้ใช้กด Enter คือการใช้หมายเลขคีย์หมายเลขคีย์คือ = 13 เพื่อตรวจสอบค่าของคีย์ในอุปกรณ์ของคุณ

$("input").keypress(function (e) {
  if (e.which == 32 || (65 <= e.which && e.which <= 65 + 25)
                    || (97 <= e.which && e.which <= 97 + 25)) {
    var c = String.fromCharCode(e.which);
    $("p").append($("<span/>"))
          .children(":last")
          .append(document.createTextNode(c));
  } else if (e.which == 8) {
    // backspace in IE only be on keydown
    $("p").children(":last").remove();
  }
  $("div").text(e.which);
});

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

        $(document).keypress(function(e) {
      if(e.which == 13) {
console.log("User entered Enter key");
          // the code you want to run 
      }
    });

หากคุณต้องการกำหนดเป้าหมายปุ่มหนึ่งครั้งเมื่อกดปุ่ม Enter คุณสามารถใช้รหัสได้

    $(document).bind('keypress', function(e){
  if(e.which === 13) { // return
     $('#butonname').trigger('click');
  }
});

หวังว่ามันจะช่วย



0
$(function(){
  $('.modal-content').keypress(function(e){
    debugger
     var id = this.children[2].children[0].id;
       if(e.which == 13) {
         e.preventDefault();
         $("#"+id).click();
       }
   })
});

3
คุณช่วยเพิ่มความเห็นอธิบายเพื่อถามผู้ถามได้ว่าโค้ดของคุณทำงานอย่างไร - ขอบคุณ
SaschaM78

0
$(document).keyup(function(e) {
    if(e.key === 'Enter') {
        //Do the stuff
    }
});

ดูเหมือนว่าการปรับคำตอบอื่น ๆ - คุณสามารถเพิ่มคำอธิบายเพื่อทำให้คุณน่าสนใจเหมือนกับคนอื่น ๆ ได้หรือไม่?
Nico Haase

0

$(document).on("keydown")ผมใช้

keyCodeไม่รองรับเบราว์เซอร์บางตัว เช่นเดียวกันwhichหากkeyCodeไม่รองรับคุณจำเป็นต้องใช้whichและในทางกลับกัน

$(document).on("keydown", function(e) {
  const ENTER_KEY_CODE = 13;
  const ENTER_KEY = "Enter";
  var code = e.keyCode || e.which
  var key = e.key
  if (code == ENTER_KEY_CODE || key == ENTER_KEY) {
    console.log("Enter key pressed")
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

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