วิธีเรียกใช้ปุ่ม HTML เมื่อคุณกด Enter ในกล่องข้อความ


106

ดังนั้นรหัสที่ฉันมีคือ:

<fieldset id="LinkList">
    <input type="text" id="addLinks" name="addLinks" value="http://">
    <input type="button" id="linkadd" name="linkadd" value="add">
</fieldset>

มันไม่ได้อยู่ใน a <form>และเหมือนกับที่อยู่ในไฟล์<div>. อย่างไรก็ตามเมื่อฉันพิมพ์สิ่งที่textboxเรียกว่า "addLinks" ฉันต้องการให้ผู้ใช้สามารถกด Enter และเรียกใช้ "linkadd" buttonซึ่งจะเรียกใช้ฟังก์ชัน JavaScript
ฉันจะทำเช่นนี้ได้อย่างไร?
ขอบคุณ

แก้ไข: ฉันพบรหัสนี้ แต่ดูเหมือนจะใช้งานไม่ได้

$("#addLinks").keyup(function(event){
    if(event.keyCode == 13){
        $("#linkadd").click();
    }
});

3
ผูกkeypressและตรวจสอบe.charCode==13(ปุ่ม Enter)
Brad Christie

คุณได้เพิ่มการอ้างอิงไลบรารี jquery ก่อนที่จะใช้โค้ดด้านบนหรือไม่?
Milind Anantwar

ใช่ฉันมีไลบรารีอ้างอิงไม่แน่ใจว่าทำไมมันถึงใช้งานไม่ได้ แต่ตอนนี้ดี ขอบคุณ
Ben

ใช่ตามที่ @BradChristie กล่าวถึงkeypressหรือkeydownกล่าวถึงในคำตอบนี้คือหนทางที่จะไป
metakermit

คำตอบ:


117
$(document).ready(function(){
    $('#TextBoxId').keypress(function(e){
      if(e.keyCode==13)
      $('#linkadd').click();
    });
});

5
การเพิ่ม 'return false' หลังจากเหตุการณ์การคลิกก็มีประโยชน์เช่นกันเพื่อหลีกเลี่ยงการกด Enter เริ่มต้นบนปุ่มอื่น ๆ บนหน้า
deebs

คำตอบของ dmitry_romanovดีกว่าเพราะเป็น html ที่บริสุทธิ์
McKay

6
@McKay ไม่มันไม่ได้ ปุ่มสามารถใช้สำหรับสิ่งต่างๆนอกเหนือจากแบบฟอร์ม ในความเป็นจริงคำถามของ OP ไม่ได้อยู่ในรูปแบบอย่างชัดเจน
แดน

2
@deebs ค่อนข้างถูกไม่แน่ใจว่าฉันทำอะไรในวันนั้น แต่ฉันต้องมีสมองผายลม
Tim ที่ MastersAllen

5
เตือน มันจะเลิกในขณะนี้
КонстантинВан

78

มันคือ……ปี 2020 และฉันเชื่อว่าสิ่งนี้ยังคงเป็นจริง


ไม่ได้ใช้ keypress

  1. keypressเหตุการณ์จะไม่เรียกเมื่อผู้ใช้กดปุ่มที่ไม่ได้ผลิตตัวอักษรใด ๆเช่นTab, Caps Lock, Delete, Backspace, Escape, ซ้ายและขวาShiftปุ่มฟังก์ชั่น ( F1- F12)

    keypressเหตุการณ์Mozilla Developer Network

    keypressเหตุการณ์ถูกยิงเมื่อคีย์ถูกกดลงและที่สำคัญที่ปกติผลิตค่าตัวอักษร ใช้inputแทน

  2. เลิกใช้งานแล้ว

    keypressเหตุการณ์UI เหตุการณ์ (แบบร่างการทำงาน W3C เผยแพร่เมื่อวันที่ 8 พฤศจิกายน 2018)

    • หมายเหตุ | keypressเหตุการณ์เป็นประเพณีที่เกี่ยวข้องกับการตรวจสอบค่าของตัวอักษรมากกว่าทางกายภาพที่สำคัญและอาจจะไม่สามารถใช้ได้ในทุกปุ่มในการกำหนดค่าบางอย่าง
    • คำเตือน | keypressประเภทเหตุการณ์ที่กำหนดไว้ในข้อกำหนดนี้สำหรับการอ้างอิงและครบถ้วน แต่ข้อกำหนดนี้deprecatesใช้ประเภทของเหตุการณ์นี้ เมื่ออยู่ในการแก้ไขบริบทผู้เขียนสามารถสมัครเข้าร่วมbeforeinputกิจกรรมแทนได้

ไม่ได้ใช้ KeyboardEvent.keyCode

  1. เลิกใช้งานแล้ว

    KeyboardEvent.keyCode Mozilla Developer Network

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


ฉันควรใช้อะไร? (แนวทางปฏิบัติที่ดี)

// Make sure this code gets executed after the DOM is loaded.
document.querySelector("#addLinks").addEventListener("keyup", event => {
    if(event.key !== "Enter") return; // Use `.key` instead.
    document.querySelector("#linkadd").click(); // Things you want to do.
    event.preventDefault(); // No need to `return false;`.
});

แล้วไง: if (event.key == "Enter") { document.querySelector("#linkadd").click(); } ?
Anupam

2
โปรดทราบว่า.keyไม่รองรับในทุกเบราว์เซอร์: caniuse.com/#feat=keyboardevent-keyผู้คนประมาณ 10% ใช้เบราว์เซอร์ที่ไม่รองรับ
Martin Tournoij

73

มีวิธีแก้ปัญหาแบบ js-free

ตั้งค่าtype=submitเป็นปุ่มที่คุณต้องการเป็นค่าเริ่มต้นและtype=buttonเป็นปุ่มอื่น ๆ ตอนนี้ในแบบฟอร์มด้านล่างคุณสามารถกด Enter ในช่องป้อนข้อมูลใดก็ได้และRenderปุ่มจะใช้งานได้ (แม้ว่าจะเป็นปุ่มที่สองในแบบฟอร์มก็ตาม)

ตัวอย่าง:

    <button id='close_renderer_button' class='btn btn-success'
            title='Перейти к редактированию программы'
            type=button>
      <span class='glyphicon glyphicon-edit'> </span> Edit program
    </button>
    <button id='render_button' class='btn btn-primary'
            title='Построить фрактал'
            type=submit
            formaction='javascript:alert("Bingo!");'>
      <span class='glyphicon glyphicon-send'> </span> Render
    </button>

ทดสอบใน FF24 และ Chrome 35 ( formactionเป็นคุณลักษณะ html5 แต่typeไม่ใช่)


17
ใช้งานได้ก็ต่อเมื่อคุณอยู่ในแบบฟอร์ม OP ไม่ได้ใช้แบบฟอร์ม
แอนดรู

@ แอนดรูว์ใช่ฉันพลาดอย่างนั้น ตอนนี้ฉันเห็นมันชัดเจนแล้วขอบคุณ
dmitry_romanov

4
@ แอนดรูจริง แต่ส่วนใหญ่แล้วมันเป็นเรื่องเล็กน้อยที่จะห่อไว้ในรูปแบบที่ไม่ต้องทำอะไร ...
Stephen Chung

2
นอกจากนี้โซลูชันนี้ยังทำงานบนปุ่มแป้นพิมพ์เสมือนของ iOS [Go] ซึ่งมีการดำเนินการเริ่มต้นในการส่ง
Elemental

10
  1. แทนที่buttonด้วยไฟล์submit
  2. มีความก้าวหน้าตรวจสอบให้แน่ใจว่าคุณมีเวอร์ชันฝั่งเซิร์ฟเวอร์
  3. ผูก JavaScript ของคุณกับsubmitตัวจัดการของแบบฟอร์มไม่ใช่clickตัวจัดการปุ่ม

การกด Enter ในช่องจะทริกเกอร์การส่งแบบฟอร์มและตัวจัดการการส่งจะเริ่มทำงาน


6

คุณสามารถเพิ่มตัวจัดการเหตุการณ์ให้กับข้อมูลที่คุณป้อนได้ดังนี้:

document.getElementById('addLinks').onkeypress=function(e){
    if(e.keyCode==13){
        document.getElementById('linkadd').click();
    }
}

2

ใช้งานได้เมื่อ input type = "button" ถูกแทนที่ด้วย input type = "submit" สำหรับปุ่มเริ่มต้นซึ่งจำเป็นต้องทริกเกอร์


1

ก่อนอื่นให้เพิ่ม jquery ไฟล์ไลบรารีjqueryและเรียกมันในหัว html ของคุณ

จากนั้นใช้รหัสตาม jquery ...

$("#id_of_textbox").keyup(function(event){
    if(event.keyCode == 13){
        $("#id_of_button").click();
    }
});

1

ควรทำเช่นนี้ฉันใช้ jQuery คุณสามารถเขียนจาวาสคริปต์ธรรมดาได้
แทนที่sendMessage()ด้วยฟังก์ชันของคุณ

$('#addLinks').keypress(function(e) {
    if (e.which == 13) {
        sendMessage();
        e.preventDefault();
    }
});

1

จากคำตอบก่อนหน้านี้ฉันได้สิ่งนี้:

<form>
  <button id='but' type='submit'>do not click me</button>
  <input type='text' placeholder='press enter'>
</form>

$('#but').click(function(e) {
  alert('button press');
  e.preventDefault();
});

ลองดูที่Fiddle

แก้ไข: หากคุณไม่ต้องการเพิ่มองค์ประกอบ html เพิ่มเติมคุณสามารถทำได้ด้วย JS เท่านั้น:

    $("input").keyup(function(event) {
        if (event.keyCode === 13) {
            $("button").click();
        }
    });     

0

ฉันพบ w3schools.com howto หน้าลองฉันมีดังต่อไปนี้

https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_trigger_button_enter

สิ่งนี้ใช้ได้ในเบราว์เซอร์ปกติของฉัน แต่ใช้ไม่ได้ในแอพ php ของฉันซึ่งใช้เบราว์เซอร์ php ในตัว

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

    function checkForEnterKey(){
        if (event.keyCode === 13) {
            event.preventDefault();
            document.getElementById("myBtn").click();
        }
    }

    function buttonClickEvent()
    {
        alert('The button has been clicked!');
    }

HTML กดปุ่ม Enter ภายในกล่องข้อความเพื่อเปิดใช้งานปุ่ม

    <br />
    <input id="myInput" onkeyup="checkForEnterKey(this.value)">
    <br />
    <button id="myBtn" onclick="buttonClickEvent()">Button</button>


-2

ฉันกำลังใช้ปุ่มเคนโด้ สิ่งนี้ได้ผลสำหรับฉัน

<div class="form-group" id="indexform">
    <div class="col-md-8">
            <div class="row">
                <b>Search By Customer Name/ Customer Number:</b>
                @Html.TextBox("txtSearchString", null, new { style = "width:400px" , autofocus = "autofocus" })
                @(Html.Kendo().Button()
                    .Name("btnSearch")
                    .HtmlAttributes(new { type = "button", @class = "k-primary" })
                    .Content("Search")
                    .Events(ev => ev.Click("onClick")))
            </div>
    </div>
</div>
<script>
var validator = $("#indexform").kendoValidator().data("kendoValidator"),
          status = $(".status");
$("#indexform").keyup(function (event) {
    if (event.keyCode == 13) {
        $("#btnSearch").click();
    }
});
</script>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.