Sự khác biệt giữa <input type = 'button' /> và <input type = 'submit' />


223

Không có gì gọi là một câu hỏi ngu ngốc, vì vậy ở đây chúng tôi đi: sự khác biệt giữa <input type='button' />và là <input type='submit' />gì?


2
Phần tử <button> HTML không tự gửi biểu mẫu, bạn đời ...
Lý thuyết lục giác

6
Trên thực tế, nó làm trong một số trình duyệt. Có một biểu mẫu, không có nút gửi mà thay vào đó, nút <sẽ áp dụng chức năng gửi cho nó. Firefox có hành vi này.
jishi

Khi đọc thông số W3C, đây thực sự là hành vi mặc định, vì các nút có thuộc tính loại mặc định là "gửi".
jishi


37
Tôi đã có cùng một câu hỏi và đây chắc chắn không phải là một câu hỏi ngu ngốc, đặc biệt nếu bạn là một nhà phát triển biểu mẫu web asp.net cả đời, nơi chúng tôi không sử dụng html thường xuyên hàng ngày vì điều khiển asp.net ngu ngốc đã nhổ cái này ra đối với chúng tôi ... đó là lý do tại sao chúng tôi cuối cùng bị câm khi chuyển sang MVC và phải quay lại trường mẫu giáo để tìm ra cách mã hóa các phần tử biểu mẫu đơn giản một lần nữa. :)
positiveGuy

Câu trả lời:


235

<input type="button" />các nút sẽ không gửi biểu mẫu - chúng không làm bất cứ điều gì theo mặc định. Chúng thường được sử dụng cùng với JavaScript như một phần của ứng dụng AJAX.

<input type="submit"> các nút sẽ gửi biểu mẫu mà họ đang ở khi người dùng nhấp vào chúng, trừ khi bạn chỉ định khác với JavaScript.


42
Ngoài ra, các trình duyệt có thể chụp phím "Enter" trên một biểu mẫu và tự động gửi biểu mẫu nếu có nút gửi, nhưng không thì khác.
Ông Sáng bóng và Mới 安

2
Họ cũng làm điều đó nếu bạn có loại = "hình ảnh", có thể được sử dụng để kích hoạt gửi biểu mẫu khi nhấp vào.
jishi

5
Mr. Shiny and New: Có thể gửi biểu mẫu qua phím enter mà không cần bất kỳ nút nào. Chẳng hạn, đủ để tập trung vào một kiểu nhập văn bản.
Lasar

3
Bạn có thể sử dụng các yếu tố BUTTON, mặc dù (ngạc nhiên bất ngờ) có một vài vấn đề với chúng khi sử dụng Trình duyệt yêu thích của mọi người (IE). Đáng để biết về mặc dù.

4
Điều này rõ ràng là rất cũ nhưng tôi cảm thấy cần phải đưa 2 xu của mình vì tôi cảm thấy đó là một sự thất bại lớn khi sử dụng các loại nút ... sự kiện biểu mẫu không được gửi từ các lần gửi javascript, dẫn đến những cơn ác mộng bảo trì tiềm năng.
mothmonsterman

20

Một "nút" chỉ là một nút mà bạn có thể thêm chức năng bổ sung bằng Javascript. Loại đầu vào 'gửi' có chức năng mặc định là gửi biểu mẫu được đặt trong đó (tuy nhiên, tất nhiên, bạn vẫn có thể thêm chức năng bổ sung bằng Javascript).


7

Nút sẽ không tự gửi biểu mẫu. Đây là một nút đơn giản được sử dụng để thực hiện một số thao tác bằng cách sử dụng javascript trong khi Gửi là một loại nút mặc định gửi biểu mẫu mỗi khi người dùng nhấp vào nút gửi.


3

IE 8 thực sự sử dụng nút đầu tiên mà nó gặp phải trình hoặc nút. Thay vì dễ dàng chỉ ra cái nào mong muốn bằng cách biến nó thành kiểu đầu vào = gửi thứ tự trên trang thực sự quan trọng.


3

Cũng cần đề cập rằng một đầu vào có tên loại = "gửi" cũng sẽ được gửi cùng với các trường có tên của biểu mẫu khác trong khi một kiểu đầu vào có tên = "nút" sẽ không.

Nói cách khác, trong ví dụ dưới đây, đầu vào có tên name=button1 KHÔNG được gửi trong khi đầu vào có tên name=submit1 SILL được gửi.

Mẫu HTML mẫu (index.html):

<form action="checkout.php" method="POST">

  <!-- this won't get submitted despite being named -->
  <input type="button" name="button1" value="a button">

  <!-- this one does; so the input's TYPE is important! -->
  <input type="submit" name="submit1" value="a submit button">

</form>

Tập lệnh PHP (checkout.php) xử lý hành động của biểu mẫu trên:

<?php var_dump($_POST); ?>

Kiểm tra phần trên trên máy cục bộ của bạn bằng cách tạo hai tệp trong thư mục có tên / tmp / test / sau đó chạy máy chủ web PHP tích hợp từ shell:

php -S localhost:3000 -t /tmp/test/

Mở trình duyệt của bạn tại http: // localhost: 3000 và tự mình xem.

Người ta sẽ tự hỏi tại sao chúng ta cần phải gửi một nút được đặt tên? Nó phụ thuộc vào kịch bản back-end. Chẳng hạn, plugin WooC Commerce WordPress sẽ không xử lý trang Checkout được đăng trừ khi Place Ordernút được đặt tên cũng được gửi. Nếu bạn thay đổi loại từ gửi sang nút thì nút này sẽ không được gửi và do đó biểu mẫu Checkout sẽ không bao giờ được xử lý.

Đây có lẽ là một chi tiết nhỏ nhưng bạn biết đấy, ma quỷ nằm trong các chi tiết.


Đây có phải là phù hợp với thông số kỹ thuật hoặc nó phụ thuộc vào trình duyệt?
Magnus Lind Oxlund

0

<input type="button">có thể được sử dụng ở bất cứ đâu, không chỉ trong mẫu và họ không gửi mẫu nếu họ ở trong một. Phù hợp hơn nhiều với Javascript.

<input type="submit">chỉ nên được sử dụng trong các biểu mẫu và họ sẽ gửi yêu cầu (GET hoặc POST) đến URL được chỉ định. Chúng không nên được đặt ở bất kỳ vị trí HTML nào.


0

W3C làm cho nó rõ ràng, về đặc điểm kỹ thuật về phần tử Nút

Nút có thể được xem là một lớp chung cho tất cả các loại Nút không có hành vi mặc định.

W3C


0

type='Submit'được đặt để chuyển tiếp và nhận các giá trị trên BACK-END (PHP, .NET, v.v.). type='button'sẽ phản ánh hành vi nút bình thường.

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.