2011-07-06 19 views
26
<input type="radio" name="group" value="book_folder" onchange="makeRadioButtons()">Create New Book</input> 

<input type="radio" name="group" value="book_chapter" onchange="makeCheckBoxes()">Create New Chapter</input> 

używałem powyższy kod i kiedy kliknął drugi przycisk opcji, myślałem, że powinien dostać dwie imprezy, jedna z przycisku, który dostał niekontrolowany i inne z przycisku, który został sprawdzony, ponieważ logicznie rzecz biorąc, oba przyciski zmieniły swój stan, a ja zawiązałem zdarzenie onchange(), a nie zdarzenie onclick(). ale jak się wydaje, dostałem tylko jedno zdarzenie z przycisku , które właśnie zostało sprawdzone. czy jest to pożądane zachowanie w html? jak mogę uzyskać zdarzenie z przycisku, jeśli zostało odznaczone?różnica między onClick() i onChange() (przyciski radiowe)

Odpowiedz

10

Użyj tego, aby uzyskać pożądane zachowanie: -

var ele = document.getElementsByName('group'); 
var i = ele.length; 
for (var j = 0; j < i; j++) { 
    if (ele[j].checked) { //index has to be j. 
     alert('radio '+j+' checked'); 
    } 
    else { 
     alert('radio '+j+' unchecked'); 
    } 
} 

Nadzieję, że to pomaga.

+0

co oznacza, że ​​nazywam tę funkcję od każdego zdarzenia onchange? – samach

+0

im przy użyciu tego kodu i jakoś ele.count() jest zerowy! : S – samach

+1

Właśnie się dowiedziałem .... jeśli używam 'ele.length;' działa dobrze ... i mówi, co przycisk radiowy był sprawdzany i odznaczony ... jedynym prblm jest to, że jesteśmy zmuszeni przechodzić wszystkie przyciski w grupie. – samach

7

Oba te pola wyboru składają się na pojedynczy element HTML, którego nazwa to group. Dlatego dostajesz tylko jedno wydarzenie tutaj.

Here to przykład demonstracyjny, który demonstruje sposób iteracji w każdym z oddzielnych pól wyboru i uzyskania dostępu do ich wartości.

+0

dzięki za odpowiedź. Ale jeśli je rozpakuję ... wszystkie mogą zostać wybrane w tym samym czasie ... Chcę wybrać tylko jeden przycisk na raz! – samach

+0

@Salman mahmood: Zobacz moją edycję. –

+0

@Salman to możesz użyć jQuery do dołączenia zdarzeń do radiotelefonów za pomocą ich atrybutu id. Sprawdź to skrzypce: http://jsfiddle.net/erKURITA/ZYR6N/2/ – erKURITA

0

Możesz użyć zmiennej do zapisania vale bieżącego zaznaczonego przycisku radiowego, więc gdy zdarzenie zostanie uruchomione, będziesz mieć zapisany stary przycisk wyboru wartości, a możesz go użyć, ponieważ w tym samym czasie tylko raz przycisk radiowy będzie być sprawdzonym. po tym można zapisać zaktualizowaną wartość przycisku radiowego.

4

Do przeglądarki N przycisków radiowych o jednej nazwie to tylko jedna kontrolka. Ponieważ kiedy chce wysłać dane pocztowe (lub uzyskać dane) z powrotem do serwera, po prostu używa atrybutu name jako klucza parametru i wartości aktualnie wybranego przycisku opcji, który ma ten atrybut nazwy jako wartość wysłany parametr. Właśnie dlatego powinieneś nazwać atrybut grupując razem radiotelefony. Tak więc zmiana nie powinna następować logicznie 10 razy dla 10 radia. Z punktu przeglądarki wartość kontrolki group zmieniła się z book_folder na book_chapter. To wszystko.

2
$(document).ready(function(){ 
     $("input[name='group']").on(
     { 
      'change' : function() 
        { 
         $.each($("input[name='group']"), 
           function() 
           { 
           var ObjectId, ObjectValue; 

           if($(this).is(':checked')) 
           { 
            /*Checked radio button OBJECT */ 

            console.log(this);      /* Jquery "this" Object */ 
            ObjectId = $(this).attr('id');  /* Id of above Jquery object */ 
            ObjectValue = $(this).val();   /* Value of above Jquery object */ 
           } 
            else 
           { 
            /* UnChecked radio button OBJECT */ 
            console.log(this);      /* Jquery "this" Object */ 
            ObjectId = $(this).attr('id');  /* Id of above Jquery object */ 
            ObjectValue = $(this).val();   /* Value of above Jquery object */ 
           } 
           } 
          ); 
        } 
     } 
    ); 
    }); 
Powiązane problemy