Ekran tarafından gizlenen giriş alanlarını bir sunucuya göndermekten nasıl kaçınılır?


89

Birkaç alanın görünürlüğünü değiştirdiğiniz bir formunuz olduğunu düşünün. Ve alan görüntülenmezse, değerinin istekte bulunmasını istemezsiniz.

Bu durumu nasıl idare ediyorsunuz?

Yanıtlar:


129

Bir form öğesini devre dışı bırakmak, sunucuya gitmesini durdurur, örneğin:

<input disabled="disabled" type="text" name="test"/>

Javascript'te şu anlama gelir:

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();

JQuery'de:

   $('form > input:hidden').attr("disabled",true);
   $('form').submit();

16
JQuery'nin sözde seçici ile :inputyerine inputsizin de kolayca devre dışı bırakabilirsiniz selectve textareaelemanları
Daniel Rikowski

8
JQuery> = 1.6'da, attr("disabled", true)sizin yerine prop("disabled", true) api.jquery.com/prop
yorch

2
@ dominicbri7 - jQuery 1.6'dan itibaren, hem devre dışı bırakılan hem de denetlenen özellikleri almak VE ayarlamak için .prop()bunun yerine kullanılması .attr()önerilir. Kontrol etmek ve / veya kullanarak ayarlamak .attr()bazı durumlarda istenmeyen sonuçları döndürecektir. Lütfen yorch'un neyi kastettiği hakkında yorum yapmadan önce jQuery belgelerini okuyun.
zgr024

@ zgr024 iyi, yorumumu sildi
dominicbri7

2
@DanielRikowski, bu jQuery ile ne var burada jQuery orada saçma. Vanilla JS'den bahsedelim.
Pacerier

13

Devre dışı bırakılan özniteliği ayarlamak için javascript kullanabilirsiniz. "Gönder" düğmesi tıklama etkinliği muhtemelen bunu yapmak için en iyi yerdir.

Ancak bunu yapmamayı tavsiye ederim. Mümkünse, sorgunuzu sunucuda filtrelemelisiniz. Bu daha güvenilir olacak.


7

Gizli bir ana öğedeki tüm öğeleri veya belirli öğeleri devre dışı bırakmak istiyorsanız, şunu kullanabilirsiniz:

$("div").filter(":hidden").children("input[type='text']").attr("disabled", "disabled");

Bu örnek http://jsfiddle.net/gKsTS/ , gizli bir div içindeki tüm metin kutularını devre dışı bırakır


Bu, gizli div üzerinden yinelenip hepsini devre dışı bıraktığı için çok iyi bir çözümdür. +1
yeppe

6

Ne dersin:

$('#divID').children(":input").prop("disabled", true); // disable

ve

$('#divID').children(":input").prop("disabled", false); // enable

Gizli bir div içindeki tüm alt girişleri (seçimler, onay kutuları, giriş, metin alanları vb.) Değiştirmek için.


Tüm girdileri almak istiyorsanız bu harika bir çözümdür. iyi iş
doz87

3

Çok basit (ama her zaman en uygun olmayan) bir çözüm, "ad" özniteliğini kaldırmaktır - standart, tarayıcıların adsız değerler göndermemesini ve bildiğim tüm tarayıcıların bu kurala uymasını gerektirir.


4
Önerilmez, çünkü javascript aracılığıyla durumları değiştirirseniz, tüm ad özniteliklerini önbelleğe almadan girdileri neredeyse sıfırlayamazsınız. Devre dışı durumunu değiştirmek çok daha kolay.
Simon

1

Değeri girdiden kaldırırdım veya girdi nesnesini DOM'dan ayırırdım, böylece ilk etapta gönderilmek üzere var olmaz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.