Jump to content
php.lv forumi
  • 0

Nenofiksē input:radio value vērtību


KarlisBa

Question

Sveiki!

Ir šāds jQuery kods:

$(document).ready(function() { 
$("input:radio[name='part']").change(function () {
	if ($("input:radio[name='part']:checked").val() == '1') {
		$("#id").removeClass("hidden");
		$("#id").addClass("show");
		} else {
			$("#id").addClass("hidden");
			}
});
});

Nosaukumi css klasēm un id elementiem mainīti, bet tas tā. Sāpe ir tajā, ka uz visiem pārlūkiem izņemot IE(visas versijas) uzklikšķinot uz radio pogas vai <label> laukā esošā teksta šī jQuery darbība izpildās - neredzamā klase tiek aizstāta ar redzamo un otrādi. Uz IE šī problēma izpaužas tā, ka vienreiz uzklikšķinot uz radio pogas vai label lauka radio poga tiek atķeksēta, bet šī jQuery funkcija izpildās tikai tad, kad vēl kaut kur otru reizi tiek uzklikšķināts. Viena css klase vienkārši satur "display: none;", bet otra "float: left; margin: 5px 0px 0px 15px; width: 239px; position: relative; top: 3px;". Ir kādas idejas kāpēc tā?

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Sintaksē kļūdas neredz... prasītos redzēt visu kopumā.. Nevari te pievienot html versiju failam, kur varētu redzēt to strādājošu?

 

Jquery jau tas bonuss, ka uz visiem pārlūkiem visam būtu jāstrādā vienādi.. Iespējams, kaut kas pašā html'ā...

Edited by briedis
Link to comment
Share on other sites

  • 0

Pati forma ir diezgan paprāva, bet rekur ir attiecīgais lauks, kur tam būtu jāizpildās.

<div class="qu_radiod" id="t1"><div class="qu_radiod_t"><label for="r1">Lauks kur klikšķināt></label></div><input type="radio" name="part" value="1" id="r1"></div>
<div class="hidden" id="id">
<div class="qu_radiod_u_in"><div class="qu_radiod_u_in_t"><?=$LANG['que-reg'];?></div><select name="region"><?=$qufo->select_names('region',0);?></select></div>
<div class="qu_radiod_u_in"><div class="qu_radiod_u_in_t"><?=$LANG['que-nov'];?></div><select name="area"><?=$qufo->select_names('area',0);?></select></div>
<div class="qu_radiod_u_in"><div class="qu_radiod_u_in_t"><?=$LANG['que-pag'];?></div><select name="rural"><?=$qufo->select_names('rural',0);?></select></div>
</div>

Attiecīgos nosaukumus nomainīju, bet tā kopumā, šis ir tas lauks, uz kuru pēc pirmās radio pogas atķeksēšanas būtu jāiedarbojas kodam.

Edited by KarlisBa
Link to comment
Share on other sites

  • 0

liec nevis .change, bet .click vai .mousedown

Tas jquery kods vispār tā pabriesmīgi uzrakstīts

 

Domāju, ka click eventu gan nevajag likt, jo tad var spaidīt uz vienu konkrētu radio buttonu un events izpildīsies, kaut arī checked statuss nemainīsies...

 

 

Es ieteiktu paprovē uzlikt eventu nevis visām radio pogām pēc konkrētā vārda (cik saprotams, viņas tur ir variākas), bet gan piesaistīt konkrētajai pogai...

 

$(document).ready(function(){
$("input#show_hide").change(function(){
	if($(this).is(":checked")){
		$("#tavs_id").show();
	}else{
		$("#tavs_id").hide();
	}
});	
});

 

hmm, tikko padomāju - vispār jau jebkurā brīdī kāds no radio buttoniem ar tādu vārdu būs atķeksēts, jo tas jau nav checkboxs, tur notiek pārslēgšanās no viena radio un citu, mainās tikai vērtība, elementa vārds paliek tāds pats :)

 

Šitā vajadzētu strādāt:

$(document).ready(function() { 
       $("input:radio[name='part']").change(function () {
               if ($("input:radio[name='part'][value='TAA KONKREETAA LAUKA VEEERTIIBA']:checked").val() == '1') {
                       $("#id").removeClass("hidden");
                       $("#id").addClass("show");
                       } else {
                               $("#id").addClass("hidden");
                               }
       });
});

 

hmm, un man liekas, smukāk ir rakstīts $(elements).is(":checked") - kas atgriež bool vērtību, vai ir atķeksēts (vai tas čekbokss, vai radio), nevis .val == 1 :)

Edited by briedis
Link to comment
Share on other sites

  • 0

vispār vajag click, jo change var nenostrādāt uz visiem browseriem vienādi. It īpaši IE. Tas onchange izsauc tikai, kad radio izselektējas, nevis ieselektējas. Un lai jau events izpildās! Nav jau tur ajax. Var papildus pielikt kādu pārbaudi, ja nu baigi. Sekojoši to skriptu var uztaisīt optimālāku un būs vēl mazāk problēmu, ka otreiz uzklikšķinātu.

Tas .val() vispār atgriež value, nevis, vai ir ieķeksēts vai nav. Nerunājot nemaz, ka ja jau uzklikšķināts, tad pēc idejas jābūt ieķeksētam (ja izmanto onclick vai onchange uz neIE)

Es darītu kaut kā tā, ja html uzbūve ir tāda:

<style type="text/css">
.hidden { display:none; }
</style>
<div id="conteiners">
 <div class="qu_radiod"><input type="radio" name="part" value="1"></div>
 <div class="hidden">
   saturs pirmajam
 </div>

 <div class="qu_radiod"><input type="radio" name="part" value="2"></div>
 <div class="hidden">
   saturs otrajam
 </div>
<!-- utt -->
</div>
<script type="text/javascript">
$(document).ready(function(){
   $('#conteiners input:radio').click(function(){
       var laukskomainit = $(this).parent().next();      // relatīvi pret inputu, ja maina html struktūru, tad šo izmaina
       if (laukskomainit.is(':hidden')) {                // pārbaudam vai nav otreiz uzklikšķināts uz redzamā lauka
           $('#conteiners > div.hidden:visible').hide(); // paslēpjam redzamo
           laukskomainit.show();                         // parādam vajadzīgo
       }
   });
});
</script>

 

PS. mousedown gan nevar izmantot.

Edited by indoom
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...