Bagaimana cara memicu tombol HTML saat Anda menekan Enter di kotak teks?


106

Jadi kode yang saya miliki selama ini adalah:

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

Ini tidak ada di dalam <form>dan sama seperti di dalam a <div>. Namun ketika saya mengetik sesuatu ke dalam yang textboxdisebut "addLinks", saya ingin pengguna dapat menekan Enter dan memicu "linkadd"button yang kemudian akan menjalankan fungsi JavaScript.
Bagaimana saya bisa melakukan ini?
Terima kasih

Sunting: Saya memang menemukan kode ini, tetapi sepertinya tidak berhasil.

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

3
mengikat keypressdan memeriksa e.charCode==13(tombol enter).
Brad Christie

Sudahkah Anda menambahkan referensi library jquery sebelum menggunakan kode di atas?
Milind Anantwar

Ya, saya memiliki referensi perpustakaan, tidak yakin mengapa itu tidak berfungsi, tetapi sekarang baik-baik saja. Terima kasih
Ben

Ya, seperti yang @BradChristie sebutkan, keypressatau keydowndisebutkan dalam jawaban ini adalah cara yang tepat.
metakermit

Jawaban:


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

5
menambahkan 'return false' setelah acara klik juga membantu, untuk menghindari default enter, tekan tombol lain di halaman
deebs

Jawaban dmitry_romanov lebih baik karena ini murni html.
McKay

6
@ McKay, tidak. Tombol dapat digunakan untuk hal-hal selain formulir. Padahal, pertanyaan OP secara eksplisit tidak dalam bentuk.
Dan

2
@deebs cukup benar, tidak yakin apa yang saya lakukan pada hari itu tetapi saya pasti memiliki otak kentut.
Tim di MastersAllen


77

Sekarang …… 2020. Dan saya yakin ini masih berlaku.


JANGAN GUNAKAN keypress

  1. keypressAcara ini tidak dipicu ketika pengguna menekan tombol yang tidak menghasilkan karakter apapun , seperti Tab, Caps Lock, Delete, Backspace, Escape, kiri & kanan Shift, tombol fungsi ( F1- F12).

    keypressacara Jaringan Pengembang Mozilla

    The keypressevent dipecat ketika tombol ditekan , dan kunci yang biasanya menghasilkan nilai karakter . Gunakan inputsebagai gantinya.

  2. Sudah tidak digunakan lagi.

    keypressacara UI Events (draft kerja W3C diterbitkan pada 8 November 2018.)

    • CATATAN | The keypressevent secara tradisional dikaitkan dengan mendeteksi nilai karakter bukan kunci fisik , dan mungkin tidak tersedia pada semua kunci dalam beberapa konfigurasi.
    • PERINGATAN | The keypressjenis acara didefinisikan dalam spesifikasi ini untuk referensi dan kelengkapan, tapi spesifikasi ini deprecates penggunaan jenis acara ini. Saat mengedit konteks, penulis dapat berlangganan beforeinputacara tersebut.

JANGAN GUNAKAN KeyboardEvent.keyCode

  1. Sudah tidak digunakan lagi.

    KeyboardEvent.keyCode Jaringan Pengembang Mozilla

    Tidak digunakan lagi | Fitur ini tidak lagi direkomendasikan. Meskipun beberapa browser mungkin masih mendukungnya, ini mungkin telah dihapus dari standar web yang relevan, mungkin sedang dalam proses dihapus, atau hanya disimpan untuk tujuan kompatibilitas. Hindari menggunakannya, dan perbarui kode yang ada jika memungkinkan; lihat tabel kompatibilitas di bagian bawah halaman ini untuk memandu keputusan Anda. Ketahuilah bahwa fitur ini dapat berhenti bekerja kapan saja.


Lalu apa yang harus saya gunakan? (Praktik yang baik)

// 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;`.
});

bagaimana dengan if (event.key == "Enter") { document.querySelector("#linkadd").click(); } :?
Anupam

2
Perhatikan bahwa .keytidak didukung di semua browser: caniuse.com/#feat=keyboardevent-key - sekitar 10% orang menggunakan browser yang tidak mendukungnya.
Martin Tournoij

72

Ada solusi bebas js.

Setel type=submitke tombol yang Anda inginkan sebagai default dan type=buttonke tombol lain. Sekarang di formulir di bawah ini Anda dapat menekan Enter di sembarang bidang masukan, dan Rendertombol akan berfungsi (meskipun faktanya itu adalah tombol kedua di formulir).

Contoh:

    <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>

Diuji di FF24 dan Chrome 35 ( formactionadalah fitur html5, tetapi typetidak).


17
hanya berfungsi jika Anda berada dalam formulir, OP tidak menggunakan formulir
Andrew

@ Andrew Ya, saya merindukan itu. Sekarang saya bisa melihatnya dengan jelas, terima kasih.
dmitry_romanov

4
@Andrew, benar, tetapi dalam banyak kasus sepele untuk membungkusnya dalam bentuk tidak melakukan apa-apa ...
Stephen Chung

2
Selain itu, solusi ini bekerja pada tombol [Go] keyboard virtual iOS yang tindakan defaultnya adalah mengirimkan.
Elemental

10
  1. Gantikan buttondengan asubmit
  2. Bersikaplah progresif , pastikan Anda memiliki versi sisi server
  3. Ikat JavaScript Anda ke submitpengendali formulir, bukan clickpengendali tombol

Menekan enter di lapangan akan memicu pengiriman formulir, dan penangan pengiriman akan aktif.


6

Anda bisa menambahkan event handler ke masukan Anda seperti:

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

2

Ini berfungsi ketika input type = "button" diganti dengan input type = "submit" untuk tombol default yang perlu dipicu.


1

Pertama-tama tambahkan file jquery library jquery dan panggil di kepala html Anda.

dan kemudian Gunakan kode berbasis jquery ...

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

1

Ini harus melakukannya, saya menggunakan jQuery Anda dapat menulis javascript biasa.
Ganti sendMessage()dengan fungsionalitas Anda.

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

1

Berdasarkan beberapa jawaban sebelumnya, saya mendapatkan ini:

<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();
});

Lihatlah Fiddle

EDIT: Jika Anda tidak ingin menambahkan elemen html tambahan, Anda dapat melakukan ini hanya dengan JS:

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

0

Saya menemukan howto w3schools.com, halaman coba saya ada di berikut ini.

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

Ini berfungsi di browser biasa saya tetapi tidak berfungsi di aplikasi php saya yang menggunakan browser php bawaan.

Setelah sedikit bermain-main, saya menemukan alternatif JavaScript murni berikut yang berfungsi untuk situasi saya dan harus berfungsi dalam setiap situasi lain:

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

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

HTML Tekan tombol enter di dalam kotak teks untuk mengaktifkan tombol.

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

-1
<input type="text" id="input_id" />    

$('#input_id').keydown(function (event) {
    if (event.keyCode == 13) { 
         // Call your function here or add code here
    }
});

-2

Saya menggunakan tombol kendo. Ini berhasil untuk saya.

<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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.