Làm cách nào để kích hoạt nút HTML khi bạn nhấn Enter trong hộp văn bản?


106

Vì vậy, mã mà tôi có cho đến nay là:

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

Nó không nằm trong a <form>và cũng giống như nó nằm trong a <div>. Tuy nhiên, khi tôi nhập một cái gì đó vào textbox"addLinks", tôi muốn người dùng có thể nhấn Enter và kích hoạt "linkadd" button, sau đó sẽ chạy một hàm JavaScript.
Tôi có thể làm cái này như thế nào?
Cảm ơn

Chỉnh sửa: Tôi đã tìm thấy mã này, nhưng nó dường như không hoạt động.

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

3
liên kết keypressvà kiểm tra e.charCode==13(nút nhập).
Brad Christie

Bạn đã thêm tham chiếu thư viện jquery trước khi sử dụng mã trên chưa?
Milind Anantwar 18/10/12

Có, tôi đã tham khảo thư viện, không chắc tại sao nó không hoạt động, nhưng bây giờ nó ổn. Cảm ơn
Ben

Có, như @BradChristie đã đề cập keypresshoặc keydownđược đề cập trong câu trả lời này là cách để đi.
metakermit

Câu trả lời:


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

5
thêm 'return false' sau sự kiện nhấp chuột cũng rất hữu ích, để tránh nhấn enter mặc định trên các nút khác trên trang
deebs Ngày

Câu trả lời của dmitry_romanov tốt hơn vì nó là html thuần túy.
McKay

6
@McKay, không có đâu. Các nút có thể được sử dụng cho những thứ ngoài biểu mẫu. Trên thực tế, câu hỏi của OP rõ ràng không phải dạng.
Dan

2
@deebs khá đúng, không rõ tôi đã làm gì vào ngày hôm đó nhưng chắc là tôi bị rắm não.
Tim tại MastersAllen


76

Bây giờ là …… năm 2020. Và tôi tin rằng điều này vẫn đúng.


KHÔNG ĐƯỢC DÙNG keypress

  1. keypressSự kiện này được không được kích hoạt khi người dùng nhấn một phím mà không tạo ra bất kỳ ký tự , chẳng hạn như Tab, Caps Lock, Delete, Backspace, Escape, trái và phải Shift, phím chức năng ( F1- F12).

    keypresssự kiện Mạng nhà phát triển Mozilla

    Sự keypresskiện được kích hoạt khi một phím được nhấn xuống và phím đó thường tạo ra giá trị ký tự . Sử dụng inputthay thế.

  2. Nó đã không được dùng nữa.

    keypressevent UI Events (bản thảo làm việc của W3C được xuất bản vào ngày 8 tháng 11 năm 2018)

    • LƯU Ý | Sự keypresskiện thường được kết hợp với việc phát hiện một giá trị ký tự thay vì một khóa vật lý và có thể không khả dụng trên tất cả các khóa trong một số cấu hình.
    • CẢNH BÁO | Các keypressloại sự kiện được định nghĩa trong đặc tả này để tham khảo và đầy đủ, nhưng đặc điểm kỹ thuật này deprecates việc sử dụng các loại sự kiện này. beforeinputThay vào đó, khi chỉnh sửa ngữ cảnh, tác giả có thể đăng ký sự kiện.

KHÔNG ĐƯỢC DÙNG KeyboardEvent.keyCode

  1. Nó đã không được dùng nữa.

    KeyboardEvent.keyCode Mạng nhà phát triển Mozilla

    Không được chấp nhận | Tính năng này không còn được khuyến khích. Mặc dù một số trình duyệt có thể vẫn hỗ trợ nó, nhưng nó có thể đã bị xóa khỏi các tiêu chuẩn web liên quan, có thể đang trong quá trình loại bỏ hoặc chỉ có thể được giữ lại cho các mục đích tương thích. Tránh sử dụng nó và cập nhật mã hiện có nếu có thể; xem bảng tương thích ở cuối trang này để hướng dẫn quyết định của bạn. Lưu ý rằng tính năng này có thể ngừng hoạt động bất kỳ lúc nào.


Tôi nên sử dụng những gì sau đó? (Thực hành tốt)

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

làm thế nào về if (event.key == "Enter") { document.querySelector("#linkadd").click(); } :?
Anupam

2
Lưu ý rằng tính năng .keynày không được hỗ trợ trong tất cả các trình duyệt: caniuse.com/#feat=keyboardevent-key - khoảng 10% người sử dụng trình duyệt không hỗ trợ.
Martin Tournoij

72

Có một giải pháp miễn phí js.

Đặt type=submitthành nút bạn muốn làm mặc định và type=buttoncác nút khác. Bây giờ trong biểu mẫu bên dưới, bạn có thể nhấn Enter trong bất kỳ trường nhập nào và Rendernút sẽ hoạt động (mặc dù thực tế nó là nút thứ hai trong biểu mẫu).

Thí dụ:

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

Đã thử nghiệm trong FF24 và Chrome 35 ( formactionlà tính năng html5, nhưng typekhông phải).


17
chỉ hoạt động nếu bạn ở trong một biểu mẫu, OP không sử dụng biểu mẫu
Andrew

@Andrew Vâng, tôi đã bỏ lỡ điều đó. Bây giờ tôi có thể nhìn thấy nó rõ ràng, cảm ơn bạn.
dmitry_romanov

4
@ Andrew, đúng, nhưng nó là tầm thường trong hầu hết các trường hợp để bọc nó trong một hình thức làm-gì ...
Stephen Chung

2
Ngoài ra, giải pháp này hoạt động trên nút [Go] bàn phím ảo iOS có tác vụ mặc định là gửi.
Elemental

10
  1. Thay thế buttonbằng mộtsubmit
  2. Hãy tiến bộ , đảm bảo bạn có phiên bản phía máy chủ
  3. Liên kết JavaScript của bạn với submittrình xử lý biểu mẫu, không phải clicktrình xử lý nút

Nhấn enter trong trường sẽ kích hoạt gửi biểu mẫu và trình xử lý gửi sẽ kích hoạt.


6

Bạn có thể thêm một trình xử lý sự kiện vào đầu vào của mình như sau:

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

2

Nó hoạt động khi input type = "button" được thay thế bằng input type = "submit" cho nút mặc định cần được kích hoạt.


1

Trước hết, hãy thêm tệp jquery thư viện jquery và gọi nó trong phần đầu html của bạn.

và sau đó Sử dụng mã dựa trên jquery ...

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

1

Điều này nên làm được, tôi đang sử dụng jQuery, bạn có thể viết javascript đơn giản.
Thay thế sendMessage()bằng chức năng của bạn.

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

1

Dựa trên một số câu trả lời trước đó, tôi đã nghĩ ra điều này:

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

Hãy xem Fiddle

CHỈNH SỬA: Nếu bạn không muốn thêm các phần tử html bổ sung, bạn có thể thực hiện việc này chỉ với JS:

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

0

Tôi đã tìm thấy w3schools.com howto, trang thử tôi của họ ở sau.

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

Điều này hoạt động trong trình duyệt thông thường của tôi nhưng không hoạt động trong ứng dụng php của tôi sử dụng trình duyệt php được tích hợp sẵn.

Sau khi đùa giỡn một chút, tôi đã nghĩ ra giải pháp thay thế JavaScript thuần túy sau đây phù hợp với tình huống của tôi và sẽ hoạt động trong mọi tình huống khác:

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

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

HTML Nhấn phím enter bên trong hộp văn bản để kích hoạt nút.

    <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

Tôi đang sử dụng một nút kiếm đạo. Điều này đã làm việc cho tôi.

<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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.