2011-01-15 3 views
2

Also das Geschäft ist, dass ich Radiobox-Elemente durch Klicken auf div-Elemente aktualisieren. Also zum Beispiel habe ich 3 Divs und es gibt 1 Radiobox in jedem Div.Wie kann ich den Zustand eines Radiokastens feststellen, der von einem anderen Element in Jquery ausgelöst wurde?

Wenn Sie auf div klicken, wird das Radiobox überprüft, aber Problem ist, dass auf diese Weise .change() Ereignis nicht funktioniert.

Wie würde ich Ergebnisse erhalten, wo ich weiß, wenn bestimmte Radiobox verloren hat: Status überprüft?

Hier ist Code, den ich derzeit haben:

$('#payment_method_cards, #payment_method_ibank_swe, #payment_method_bp').click(function(){ 
    $(this).children('input[name="payment_method"]').attr('checked','checked'); 
    $('input[name="payment_method"]').change(function(){ 
     if($(this).val() == 'bp'){ 
      alert("Thats the one"); 
     } 
    } 
}); 

Die Radiobox Änderung nur ausgelöst, wenn ich innerhalb Radiobox klicken, aber nicht, wenn sie auf div.

+1

Sie müssen den Unterschied zwischen a) Binden eines Ereignishandlers an ein Ereignis und b) Ausführen eines Ereignisses verstehen. In dem obigen Code tust du a), du bindst den Change-Event-Handler an das Change-Event. Sie möchten das Änderungsereignis auslösen und nicht binden. Die Bindung des Änderungsereignisses sollte beim Laden der Seite erfolgen, nicht innerhalb eines Klick-Handlers. –

Antwort

1

Verwenden Sie Etiketten anstelle der DIVs:

Im obigen Beispiel wird durch Klicken auf das Wort "Male" das Änderungsereignis ausgelöst.

Ich empfehle die Verwendung von Etiketten, aber wenn Sie auf DIVs bestehen, wird dieser Code für Sie arbeiten. Das Änderungsereignis wird nur ausgelöst, wenn die Radiobox nicht vorher überprüft wurde.

+0

Toll, vielen Dank für wertvolle Erklärungen zu verschiedenen Teilen meines Codes. – arma

3

Ich nehme an, Sie haben eine Ereignis-Handler gebunden an die div, die click auslöst oder fügt das checked Attribut hinzu. Warum lösen Sie die Funktion change() nicht manuell aus, nachdem Sie den Status des Optionsfelds geändert haben?

$("#check-me").bind("click", function() { 
    $("#radio-btn1").click().change(); 
    // change radio button state, then trigger 'change' event. 
}); 

Update: Mit dem Code, den Sie zur Verfügung gestellt, würden Sie etwas tun (aktualisiert wieder aufgrund von OP Kommentar):

$('#payment_method_cards, #payment_method_ibank_swe, #payment_method_bp').click(function(){ 
    var $radio = $(this).children('input[name="payment_method"]'); 
    if (!$radio.is(":checked")) { 
     $radio.attr('checked','checked').change(); 
    } 
}); 

Sie sollten die change Handler außerhalb der Definition click Handler:

$('input[name="payment_method"]').change(function(){ 
    if($(this).val() == 'bp'){ 
     alert("Thats the one"); 
    } 
}  
+1

Simpler: '.attr ('checked', true)' –

+0

Cool, danke wusste nicht, dass Sie .change() als manuellen Wechsler verwenden können :) Das einzige Problem ist jetzt, dass jedes Mal, wenn Sie dieses div klicken Sie diese Warnung erhalten . Perfekt würde ich es nur beim ersten Mal darauf aufmerksam machen, dass Radio-Box überprüft wird. Wenn es den Status "checked" verliert und wieder gewonnen wird, erhalten Sie wieder Alarm. – arma

+0

@arma Ich habe deine Frage beantwortet –

Verwandte Themen