2009-07-17 23 views
10

Ich schreibe eine Quizanwendung mit php/jquery. Die Antwort Auswahlen sind wie so enthalten:Aktivieren Sie das Optionsfeld, wenn Sie auf DIV klicken

<ul id="answers"> 
    <li> 
     <div> 
     <input type='radio' name='answer_id' value='313'> True 
     </div> 
    </li> 
    <li> 
     <div> 
     <input type='radio' name='answer_id' value='314'> False 
     </div> 
    </li> 
</ul> 

Nach w/CSS gestylt wird, diese Antworten mit einer Antwort pro Zeile in einem Container erscheinen. Jede Antwort hat ihre eigene Box im Container. Ich möchte, dass der Benutzer in der Lage ist, irgendwo innerhalb des einzelnen Antwortdivs zu klicken und die Radioauswahl aktiviert zu lassen.

Wie kann ich die Optionsfeldüberprüfung aktivieren, wenn ein Benutzer in das Container-div der Optionsschaltfläche klickt und jquery verwendet?

+1

verwandte Frage http://stackoverflow.com/questions/972366/jquery-focus-function-not-working-in-firefox/ –

Antwort

25

Anstatt jQuery zu verwenden, kann dies alles in nativem HTML mit dem Element <label> erfolgen. Here is a sample davon in Aktion.

<ul id="answers"> 
     <li> 
       <label> 
        <input type='radio' name='answer_id' value='313'> True 
       </label> 
     </li> 
     <li> 
       <label> 
        <input type='radio' name='answer_id' value='314'> False 
       </label> 
     </li> 
</ul> 
+0

perrrrfect. Danke. – Ian

0

vielleicht so etwas wie:

$('#answers li div').click(function(){ 

    var r = $(this).find('input[type=radio]'); 
    if($(r).is(":checked")) 
    { 
    $(r).attr("checked", ""); 
    } 
    else 
    { 
    $(r).attr("checked", "checked"); 
    } 

}); 
2

korrekte Verwendung des Label-Tag ist:

<input type="checkbox" id="checkme" name="checkme" /> <label for="checkme">Toggle this checkbox on/off</label> 

for = "..." macht immer Bezug auf die ID des Eingangs.

1

ich mit tj111 zustimmen, aber wenn nicht immer Anzug:

  • Schwieriger Stil.
  • Etiketten funktionieren nur, wenn Text in ihnen (Danke Michael)

Hier ist der alternative Code mit div und jQuery ist:

$('input:radio').click(ev){ 
    ev.stopPropagation(); 
}).parent().click(function(ev){ 
    ev.preventDefault(); 
    $(this).children('input').click(); 
    $(this).addClass('active').siblings().removeClass('active'); 
}); 

Mit der "aktiven" Klasse ist jetzt ja verstecken die Radios und verwenden Stylesheet zum Hervorheben.

+0

Das ist ... interessant. Wie wäre es mit: $ ('input: radio'). Click (funktion (ev) {ev.stopPropagation();}). Parent(). Click (funktion (ev) {ev.preventDefault(); $ (this). Kinder ('Eingabe'). click();}); –

+0

Ich fand, dass Etiketten nur funktionierten, wenn Text (oder eine erhebliche Menge an Leerzeichen) zum Klicken verfügbar war. Umgekehrt würde das Klicken auf den Elternteil den tatsächlichen Radio-Klick selbst vermasseln. Nacharbeiten romaninshs Code löste mein Problem –

+1

Danke, ich habe meine Antwort aktualisiert, um Ihre Ergebnisse zu reflektieren. – romaninsh

Verwandte Themen