Saya memiliki beberapa input yang dinonaktifkan dalam formulir dan saya ingin mengirimkannya ke server, tetapi Chrome mengecualikannya dari permintaan.
Apakah ada solusi untuk ini tanpa menambahkan bidang tersembunyi?
<form action="/Media/Add">
<input type="hidden" name="Id" value="123" />
<!-- this does not appear in request -->
<input type="textbox" name="Percentage" value="100" disabled="disabled" />
</form>
Jawaban:
Elemen dengan
disabled
atribut tidak dikirimkan atau Anda dapat mengatakan nilainya tidak diposting (lihat poin kedua di bawah Langkah 3 dalam spesifikasi HTML 5 untuk membangun kumpulan data formulir ).Yaitu,
FYI, per 17.12.1 dalam spesifikasi HTML 4:
Anda dapat menggunakan
readonly
atribut dalam kasus Anda, dengan melakukan ini Anda akan dapat memposting data bidang Anda.Yaitu,
FYI, per 17.12.2 dalam spesifikasi HTML 4:
sumber
Menggunakan Jquery dan mengirim data dengan ajax, Anda dapat memecahkan masalah Anda:
sumber
cursor:not-allowed;
Untuk memposting nilai dari input yang dinonaktifkan selain input yang diaktifkan, Anda bisa mengaktifkan kembali semua input formulir saat dikirimkan.
Jika Anda lebih suka jQuery:
Untuk ASP.NET MVC C # Razor, Anda menambahkan submit handler seperti ini:
sumber
Jika Anda benar-benar harus menonaktifkan bidang dan meneruskan data, Anda bisa menggunakan javascript untuk memasukkan data yang sama ke bidang tersembunyi (atau cukup setel bidang tersembunyi juga). Ini akan memungkinkan Anda untuk menonaktifkannya tetapi masih memposting data meskipun Anda akan memposting ke halaman lain.
sumber
Saya memperbarui jawaban ini karena sangat berguna. Cukup tambahkan readonly ke input.
Jadi formulirnya adalah:
sumber
Semantik ini terasa seperti perilaku yang benar
Saya akan bertanya pada diri sendiri, " Mengapa saya harus menyerahkan nilai ini? "
Jika Anda memiliki input yang dinonaktifkan pada formulir, maka mungkin Anda tidak ingin pengguna mengubah nilai secara langsung
Nilai apa pun yang ditampilkan dalam input yang dinonaktifkan harus berupa
Dengan asumsi bahwa server memproses formulir adalah sama dengan server yang menyajikannya, semua informasi untuk mereproduksi nilai input yang dinonaktifkan harus tersedia saat pemrosesan
Bahkan, untuk menjaga integritas data - bahkan jika nilai input yang dinonaktifkan dikirim ke server pemrosesan, Anda harus benar-benar memvalidasinya. Validasi ini akan membutuhkan tingkat informasi yang sama seperti Anda harus mereproduksi nilai!
Saya hampir berpendapat bahwa input read-only juga tidak boleh dikirim dalam permintaan
Senang dikoreksi, tetapi semua kasus penggunaan yang dapat saya pikirkan di mana input baca-saja / dinonaktifkan harus diserahkan benar-benar hanya masalah penataan yang menyamar
sumber
Saya menemukan ini bekerja lebih mudah. baca saja kolom input, lalu gaya sehingga pengguna akhir tahu itu hanya baca. input yang ditempatkan di sini (dari AJAX misalnya) masih dapat mengirimkan, tanpa kode tambahan.
sumber
Anda benar-benar dapat menghindari penonaktifan, itu menyakitkan karena format formulir html tidak akan mengirim apa pun yang terkait dengannya
<p>
atau label lain.Jadi, Anda bisa menempatkan secara teratur
Tambahkan ini
readonly="readonly"
Itu tidak akan menonaktifkan teks Anda tetapi tidak akan berubah oleh pengguna sehingga berfungsi seperti
<p>
dan akan mengirimkan nilai melalui formulir. Hapus saja batas jika Anda ingin membuatnya lebih seperti<p>
tagsumber