Bayangkan Anda memiliki formulir di mana Anda mengalihkan visibilitas beberapa bidang. Dan jika field tidak ditampilkan, Anda tidak ingin nilainya diminta.
Bagaimana Anda menangani situasi ini?
Bayangkan Anda memiliki formulir di mana Anda mengalihkan visibilitas beberapa bidang. Dan jika field tidak ditampilkan, Anda tidak ingin nilainya diminta.
Bagaimana Anda menangani situasi ini?
Jawaban:
Menyetel elemen formulir ke nonaktif akan menghentikannya menuju server, misalnya:
<input disabled="disabled" type="text" name="test"/>
Dalam javascript itu akan berarti seperti ini:
var inputs = document.getElementsByTagName('input');
for(var i = 0;i < inputs.length; i++) {
if(inputs[i].style.display == 'none') {
inputs[i].disabled = true;
}
}
document.forms[0].submit();
Di jQuery:
$('form > input:hidden').attr("disabled",true);
$('form').submit();
attr("disabled", true)
Anda harus menggunakan prop("disabled", true)
api.jquery.com/prop
.prop()
alih-alih .attr()
untuk mendapatkan setelan AND, baik properti yang dinonaktifkan maupun yang dicentang. Memeriksa dan atau menyetel menggunakan .attr()
akan dalam beberapa kasus memberikan hasil yang tidak diinginkan. Silakan baca dokumentasi jQuery sebelum mengomentari apa yang dirujuk oleh yorch.
Anda dapat menggunakan javascript untuk mengatur atribut yang dinonaktifkan. Acara klik tombol 'kirim' mungkin adalah tempat terbaik untuk melakukan ini.
Namun, saya akan menyarankan agar tidak melakukan ini sama sekali. Jika memungkinkan, Anda harus memfilter kueri Anda di server. Ini akan lebih bisa diandalkan.
Jika Anda ingin menonaktifkan semua elemen atau elemen tertentu dalam elemen induk tersembunyi, Anda dapat menggunakan
$("div").filter(":hidden").children("input[type='text']").attr("disabled", "disabled");
Contoh ini http://jsfiddle.net/gKsTS/ menonaktifkan semua kotak teks di dalam div tersembunyi
Bagaimana dengan:
$('#divID').children(":input").prop("disabled", true); // disable
dan
$('#divID').children(":input").prop("disabled", false); // enable
Untuk mengalihkan semua input anak (memilih, checkbox, input, textareas, dll) di dalam div tersembunyi.
Satu solusi yang sangat sederhana (tetapi tidak selalu yang paling nyaman) adalah dengan menghapus atribut "name" - standar mengharuskan browser tidak mengirimkan nilai yang tidak disebutkan namanya, dan semua browser yang saya tahu mematuhi aturan ini.
:input
alih-alihinput
Anda juga dapat dengan mudah menonaktifkan semuaselect
dantextarea
elemen