Yritän tässä tehdä dynaamista lomaketta JQueryllä. Löysin parikin hyvää opasta, mutten saa hommaa toimimaan... Yritän nyt ensin saada testilomakkeen toimimaan, jossa radio-buttonin valinnasta riippuu, näytetäänkö eräs lomakkeen rivi.
Onnistun ainoastaan piilottamaan lomakkeen elementtejä CSS:llä, mutten saa niitä enää näkymään JavaScriptillä.
<html><head>
<style type="text/css">
#piilotettava {display: none}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("input[name=piilotetaanko]").change(function() {
if ($this).val() == "show") {
$("#piilotettava").slideDown('fast');
}
else {
$("#piilotettava").hide('fast');
}
})
})
</script>
<title>Rivinpiilotustesti</title></head>
<body>
<form id="lomake" name="lomake" method="post" action="#">
<table>
<tr>
<td>Haluatko, että seuraavat rivit näkyvät?</td>
<td>
<input name="piilotetaanko" id="piilotetaanko" type="radio" id="hide" value="hide" />Piilota.
<input name="piilotetaanko" id="piilotetaanko" type="radio" id="show" value="show" />Näytä.
</td>
</tr>
<tr id="piilotettava">
<td>Tämän pitaisi näkyä ja kadota.</td>
<td><input type="text" name="piilotettava1" id="piilotettava1" size="28" /><br />
<input type="text" name="piilotettava2" id="piilotettava2" size="28" />
</td>
</tr>
</form>
</body>
</html>Perusideassa on ainakin se ongelma, että kun CSS on käytössä mutta JavaScript ei, rivit ovat piilossa ja pysyvät. Luotettavampi tapa on, että teet CSS-asetuksen dynaamisesti JavaScriptissä.
Ehto
$this).val() == "show"
on useammallakin tavalla virheellinen (kannattaa käyttää esim. JSHintiä ja katsoa selaimen konsolilokia); toimiva olisi
this.value == "show"
Kuten huomaat niin sulkujen määrä ei täsmää
if ($this).val() == "show")
Korvaa vaikka tuo
$this).val()
koodilla
$("input[name=piilotetaanko]:checked").val()niin pitäisi toimia.
Myöskin miksi noilla radioilla on kummallakin kaksi id-kenttää?
Tuo ID oli tosiaan määritelty kaksi kertaa ihan vahingossa. Aikansa kun semplaa koodinsa kanssa, niin noita pyhäinjäännöksiä tuppaa jäämään koodiin. :S
Otin neuvoista vaarin, ja sain homman pelaamaan. Lopullisesta, käyttötarkotukseensa istutetusta koodista tuli seuraavanlainen.
$(document).ready(function(){
$(".verkkomaksutiedot").css("display","none");
$(".maksajan_sahkoposti").css("display","none");
$(".maksajan_postiosoite").css("display","none");
$(".lahetystapa").click(function(){
if ($('input[name=lahetystapa]:checked').val() == "Sahkoisesti" ) {
$(".maksajan_sahkoposti").slideDown("fast");
$(".maksajan_postiosoite").slideUp("fast");
$(".verkkomaksutiedot").slideUp("fast"); }
if ($('input[name=lahetystapa]:checked').val() == "Postitse" ) {
$(".maksajan_postiosoite").slideDown("fast");
$(".maksajan_sahkoposti").slideUp("fast");
$(".verkkomaksutiedot").slideUp("fast"); }
if ($('input[name=lahetystapa]:checked').val() == "Verkkolaskuna" ) {
$(".verkkomaksutiedot").slideDown("fast");
$(".maksajan_sahkoposti").slideUp("fast");
$(".maksajan_postiosoite").slideUp("fast");
} else {
$(".verkkomaksutiedot").slideUp("fast");
}
});
});Skriptin vastapelurina siis on HTML-elementit, jotka on luokissa "verkkomaksutiedot", "maksajan_sahkoposti" sekä "maksajan_postiosoite". Ehkä tuosta pätkästä on jollekulle apua.
Kiitos kaikille koodin kanssa jeesanneille!
Aihe on jo aika vanha, joten et voi enää vastata siihen.