Làm cho phím Enter trên biểu mẫu HTML gửi thay vì nút kích hoạt


81

Tôi có một biểu mẫu HTML với một submitđầu vào duy nhất , nhưng cũng có nhiều buttonphần tử khác nhau . Khi người dùng nhấn phím 'enter', tôi muốn nó thực sự gửi biểu mẫu, nhưng thay vào đó (ít nhất là trong Chrome 15), tôi thấy rằng nó đang kích hoạt phím đầu tiên button(vì điều đó xảy ra sớm hơn trong HTML so với submitđầu vào , Tôi đoán).

Tôi biết rằng nói chung bạn không thể buộc trình duyệt ưu tiên một submitđầu vào cụ thể , nhưng tôi thực sự nghĩ rằng họ sẽ ưu tiên submitđầu vào hơn buttoncác phần tử. Có một điều chỉnh nhỏ nào mà tôi có thể thực hiện đối với HTML để làm cho nó hoạt động hay tôi sẽ phải áp dụng một số loại phương pháp tiếp cận Javascript?

Đây là một mô phỏng sơ bộ của HTML:

<form action="form.php" method="POST">
    <input type="text" name="field1"/>
    <button onclick="return myFunc1()">Button 1</button>
    <input type="submit" name="go" value="Submit"/>
</form>

Kiểm tra câu hỏi này: stackoverflow.com/a/925387/1031900
Ofir Farchy

1
@OfirFarchy Tôi đoán điều tôi nghĩ đã làm cho câu hỏi này trở nên khác biệt là chỉ có MỘT lần gửi, những cái còn lại đều là nút.
andygeers

Vâng, nếu bạn không phản đối việc sử dụng JS và jQuery kiểm tra câu trả lời của tôi và david của
Ofir Farchy

Câu trả lời:


143

Bạn không cần JavaScript để chọn nút gửi hoặc đầu vào mặc định của mình. Bạn chỉ cần đánh dấu nó bằng type="submit"và các nút khác đánh dấu chúng bằng type="button". Trong ví dụ của bạn:

<button type="button" onclick="return myFunc1()">Button 1</button>
<input type="submit" name="go" value="Submit"/>

4
Điều này thực sự không hoạt động như mong đợi trong một số trình duyệt. Tôi vừa gặp phải vấn đề này hôm nay khi nghĩ rằng type = "submit" sẽ đặt nó làm mặc định, tuy nhiên nó không có trong Chrome hoặc Safari.
Ben Davis

5
Nó hoạt động cho tôi trong Chrome và Safari. Nó phải là một cái gì đó khác.
Jesús Carrera

15
Đặt type = "button" trên các nút phụ VÀ setting type = "submit" là điều tạo nên sự khác biệt.
Alex

21
Lý do nó không hoạt động nếu bạn không đặt type="button"là vì theo mặc định, các phần tử nút là type="submit". Vì vậy, tiền đề trong câu hỏi rằng chỉ có một nút gửi duy nhất thực sự không chính xác.
Elezar

30

Bạn có thể sử dụng jQuery:

$(function() {
    $("form input").keypress(function (e) {
        if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
            $('button[type=submit] .default').click();
            return false;
        } else {
            return true;
        }
    });
});

14
Vì đây là câu trả lời được chấp nhận: Hãy cuộn xuống để tìm một giải pháp rất đơn giản chỉ dành cho HTML.
jlh

2
Giải pháp HTML là câu trả lời chính xác. Trình duyệt xử lý theo mặc định
Edward Newsome

Tôi biết đây là một câu trả lời cũ, nhưng bạn không cần phải sử dụng 'thiết bị nặng' này để giải quyết vấn đề này. Sử dụng giải pháp chỉ HTML (câu trả lời của @ Jesús Carrera), trình duyệt xử lý điều này ngay bây giờ.
Martijn Luyckx

1
Điều thú vị về cách tiếp cận này - mặc dù có, nó yêu cầu jQuery / JavaScript - là nó sẽ hoạt động ngay cả khi bạn cần có nhiều nút gửi trong biểu mẫu của mình. button[type=submit]Tuy nhiên, bộ chọn cụ thể trong ví dụ này không được có khoảng trắng, giả sử rằng bạn đã gắn thẻ nút gửi mặc định của mình với defaultlớp css.
Christopher King

4

Hãy thử điều này, nếu phím enter được nhấn, bạn có thể chụp nó như thế này chẳng hạn, tôi đã phát triển một câu trả lời vào ngày hôm trước nút html chỉ định được chọn , xem điều này có giúp ích không.

Chỉ định tên biểu mẫu chẳng hạn, yourFormNamesau đó bạn sẽ có thể gửi biểu mẫu mà không cần tập trung vào biểu mẫu.

document.onkeypress = keyPress;

function keyPress(e){
  var x = e || window.event;
  var key = (x.keyCode || x.which);
  if(key == 13 || key == 3){
   //  myFunc1();
   document.yourFormName.submit();
  }
}

nếu biểu mẫu có nhiều nút gửi, điều này sẽ hữu ích: <input type = "submit" id = "submit" value = "ok" /> document.getElementById ("submit"). click ();
Muflix

Đây là một cách phổ biến để giải quyết các hành vi mặc định trong HTML. Xem câu trả lời ở trên để biết tại sao.
alttag

4
$("form#submit input").on('keypress',function(event) {
  event.preventDefault();
  if (event.which === 13) {
    $('button.submit').trigger('click');
  }
});

3

Tôi chỉ gặp một vấn đề với điều này. Của tôi đã thất bại trong việc thay đổi inputthành a buttonvà tôi đã có một />dấu chấm dứt thẻ viết xấu :

Vì vậy, tôi đã có:

<button name="submit_login" type="submit" class="login" />Login</button>

Và vừa sửa đổi nó thành:

<button name="submit_login" type="submit" class="login">Login</button>

Bây giờ hoạt động như một cái duyên, luôn là những thứ nhỏ nhặt khó chịu ... HTH


2

Do chỉ có một (hoặc với giải pháp này có khả năng không phải là một) nút gửi, đây là giải pháp dựa trên jQuery sẽ hoạt động cho nhiều biểu mẫu trên cùng một trang ...

<script type="text/javascript">
    $(document).ready(function () {

        var makeAllFormSubmitOnEnter = function () {
            $('form input, form select').live('keypress', function (e) {
                if (e.which && e.which == 13) {
                    $(this).parents('form').submit();
                    return false;
                } else {
                    return true;
                }
            });
        };

        makeAllFormSubmitOnEnter();
    });
</script>

1

Tôi vừa giới thiệu điều này trong cả Chrome, Firefox và IE10.

Như đã đề cập ở trên - hãy đảm bảo rằng bạn đã đánh dấu bằng type = "button", "reset", "submit", v.v. để đảm bảo rằng nó phân tầng chính xác và chọn đúng nút.

Có lẽ cũng đặt tất cả chúng có cùng một hình thức (tức là tất cả đều phù hợp với tôi)

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.