Giá trị của đầu vào bị vô hiệu hóa sẽ không được gửi


224

Đây là những gì tôi tìm thấy bởi Fireorms trong Firefox.

Nó có giống nhau trong các trình duyệt khác không?

Nếu vậy, lý do cho việc này là gì?


23
Bạn có thể đặt thuộc tính 'chỉ đọc'. Ví dụ, Chrome hiển thị nó dưới dạng một trường bị vô hiệu hóa nhưng không gửi nó.
peterrus

Câu trả lời:


189

Có, tất cả các trình duyệt không nên gửi các đầu vào bị vô hiệu hóa, vì chúng chỉ đọc.

Thêm thông tin (phần 17.12.1)

Định nghĩa thuộc tính

bị vô hiệu hóa [CI] Khi được đặt cho điều khiển biểu mẫu, thuộc tính Boolean này sẽ vô hiệu hóa điều khiển cho đầu vào của người dùng. Khi được đặt, thuộc tính bị vô hiệu hóa có các hiệu ứng sau trên một phần tử:

  • Điều khiển bị vô hiệu hóa không nhận được trọng tâm.
  • Điều khiển bị vô hiệu hóa được bỏ qua trong điều hướng tab.
  • Điều khiển bị vô hiệu hóa không thể thành công.

Các yếu tố sau đây hỗ trợ thuộc tính bị vô hiệu hóa: BUTTON, INPUT, OPTGROUP, OPTION, SELECT và TEXTAREA.

Thuộc tính này được kế thừa nhưng khai báo cục bộ ghi đè giá trị được kế thừa.

Làm thế nào các yếu tố bị vô hiệu hóa được hiển thị phụ thuộc vào tác nhân người dùng. Ví dụ: một số tác nhân người dùng "tắt" các mục menu bị tắt, nhãn nút, v.v.

Trong ví dụ này, phần tử INPUT bị tắt. Do đó, nó không thể nhận đầu vào của người dùng cũng như giá trị của nó sẽ không được gửi cùng với biểu mẫu.

<INPUT disabled name="fred" value="stone">

Ghi chú. Cách duy nhất để sửa đổi linh hoạt giá trị của thuộc tính bị vô hiệu hóa là thông qua một tập lệnh.


86
Giải pháp thay thế: thêm một <input type="hidden">phần tử có cùng tên / giá trị với đầu vào bị vô hiệu hóa.
John Kugelman

bất kỳ thông tin nào về trình duyệt nào và không tuân theo?
Allisone

82
thay vào đó hãy sử dụng readonly = "readonly" :) xem stackoverflow.com/questions/7357256/iêu
Adrien Be

1
@ ALLisone: Firefox & Chrome dường như tuân theo điều này (đầu vào bị vô hiệu hóa KHÔNG được gửi). Không thử trên các trình duyệt khác.
Adrien Be

1
@JohnKugelman tại sao cùng tên? người khuyết tật dù sao cũng sẽ không được gửi .. cũng có thể đặt tên thật cho người bị ẩn và sử dụng tên khác cho người khuyết tật
Arth

286

disabled đầu vào sẽ không gửi dữ liệu.

Sử dụng readonlythuộc tính:

<input type="text" readonly />

Nguồn ở đây


@FrankFang, Ok, nhưng, khi tôi chuyển dữ liệu đến mẫu lưỡi kiếm của tập thể Laravel. Nó sẽ không hoạt động. Không thể gửi dữ liệu theo cách đó.
ssi-anik

@ ssi-anik readonlyhoạt động, chỉ cần đảm bảo bạn chuyển "tên" attr cho đầu vào.
BenNov

26

Bạn có thể sử dụng ba thứ để bắt chước bị vô hiệu hóa:

  1. HTML: readonlythuộc tính (để có thể sử dụng giá trị trong đầu vào khi gửi biểu mẫu. Ngoài ra, người dùng không thể thay đổi giá trị đầu vào)

  2. CSS: 'pointer-events':'none'(chặn người dùng nhấp vào đầu vào)

  3. HTML: tabindex="-1"(chặn người dùng điều hướng đến đầu vào từ bàn phím)


22

Họ không được gửi, vì đó là những gì nó nói trong đặc tả W3C .

17.13.2 Kiểm soát thành công

Một kiểm soát thành công là "hợp lệ" để nộp. [bắn tỉa]

  • Kiểm soát bị vô hiệu hóa không thể thành công.

Nói cách khác, đặc tả nói rằng các điều khiển bị vô hiệu hóa được coi là không hợp lệ và không nên gửi.


2

Disabledđiều khiển không thể thành công và điều khiển thành công là "hợp lệ" để gửi. Đây là lý do tại sao các điều khiển bị vô hiệu hóa không gửi cùng với biểu mẫu.


1

Có hai thuộc tính, cụ thể readonlydisabled, có thể tạo đầu vào chỉ đọc nửa đọc. Nhưng có một sự khác biệt nhỏ giữa chúng.

<input type="text" readonly />
<input type="text" disabled />
  • Các readonly thuộc tính làm cho văn bản đầu vào của bạn khuyết tật, và người dùng không thể thay đổi được nữa.
  • disabledThuộc tính không chỉ làm cho văn bản đầu vào của bạn bị vô hiệu hóa (không thể thay đổi) mà còn không thể gửi nó .

Cách tiếp cận jQuery (1):

$("#inputID").prop("readonly", true);
$("#inputID").prop("disabled", true);

Cách tiếp cận jQuery (2):

$("#inputID").attr("readonly","readonly");
$("#inputID").attr("disabled", "disabled");

Cách tiếp cận JavaScript:

document.getElementById("inputID").readOnly = true;
document.getElementById("inputID").disabled = true;

PS disabledreadonlylà các thuộc tính html tiêu chuẩn. propgiới thiệu với jQuery 1.6.


0

điều khiển chọn vẫn có thể nhấp được ngay cả trên attribly chỉ

nếu bạn muốn vô hiệu hóa điều khiển nhưng bạn muốn giá trị của nó được đăng. Bạn có thể xem xét việc tạo một trường ẩn. với giá trị tương tự như sự kiểm soát của bạn.

sau đó tạo một jquery, trên chọn thay đổi

$('#your_select_id').change(function () {
    $('#your_hidden_selectid').val($('#your_select_id').val());
});
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.