İlgili radyo düğmesini seçmek için metne tıklama


87

PHP kullanarak bir sınav web uygulaması oluşturuyorum. Her soru ayrı bir soru içerir ve kullanıcının cevabını seçmesine izin veren <label>4 olası seçeneği vardır radio buttons. Tek bir soru için mevcut HTML şu şekildedir:

<label for="349">What is my middle name?</label>
<br>
<input id="349" type="radio" value="1" name="349">Abe
<br>
<input id="349" type="radio" value="2" name="349">Andrew
<br>
<input id="349" type="radio" value="3" name="349">Andre
<br>
<input id="349" type="radio" value="4" name="349">Anderson
<br>

Kullanıcının radyo düğmesiyle ilişkili metne tıklama seçeneğine sahip olmasını istiyorum . Şu anda, kullanıcı radyo düğmesinin kendisine yalnızca tıklayabiliyor - bunu oldukça külfetli buluyorum.

Seçim metnine tıklayarak belirli bir radyo düğmesi seçimini seçemiyorum okudum ve öneri , etiketlerin forve idözniteliklerinin eşleşmesini işaret ediyor. Bunu yaptım ve hala çalışmıyor.

Sorum şu: Yalnızca radyo düğmesinin kendisini seçebilmenin aksine , bir <input type="radio">nesnenin metnini tıklayabilmek istiyorum . Bunu daha önce okuduğumu biliyorum ama sorunuma herhangi bir çözüm bulamıyorum. Herhangi bir yardım veya öneri çok takdir edilmektedir!

Yanıtlar:


177

Kodunuzda, formun kendisinde bir etiket var. Aşağıda gösterildiği gibi her bir radyo grubuna ayrı ayrı etiket koymak istiyorsunuz.

<form>
  <p>What is my middle name?</p>
  <br>
  <input id="349" type="radio" value="1" name="question1">
  <label for="349">Abe</label>
  <br>
  <input id="350" type="radio" value="2" name="question1">
  <label for="350">Andrew</label>
  <br>
  <input id="351" type="radio" value="3" name="question1">
  <label for="351">Andre</label>
  <br>
  <input id="352" type="radio" value="4" name="question1">
  <label for="352">Anderson</label>
  <br>
</form>

İki öğenin asla aynı kimliğe sahip olmaması gerektiğini unutmamalısınız. nameNitelik radyo düğmeleri bir grup olarak işlev görebilir ve bir defada sadece tek bir seçime izin böylece kullanılır.


7
Son derece basit. Neredeyse gizli bir etiket özelliği yeniden keşfedildiğinde
bayıldım

38

Nathan'ın cevabına göre yapılırsa radyo düğmesi ile etiket arasında tıklanamaz küçük bir boşluk var gibi görünüyor . İşte onları sorunsuz bir şekilde nasıl birleştireceğiniz ( bu makaleye bakın ):

<form>
    <p>What is my middle name?</p>
    <br>
    <label><input id="349" type="radio" value="1" name="question1">Abe</label>
    <br>
    <label><input id="350" type="radio" value="2" name="question1">Andrew</label>
    <br>
    <label><input id="351" type="radio" value="3" name="question1">Andre</label>
    <br>
    <label><input id="352" type="radio" value="4" name="question1">Anderson</label>
    <br>
</form>

2
Bu cevabı tercih ederim. Ancak bu yaklaşımla "for" özelliklerine ihtiyacınız olduğundan emin misiniz?
Piddu

@Piddu: Sanırım haklısın, bu yüzden cevabımı güncelledim. Teşekkürler!
user21820

Radyo düğmesi ve etiket arasında ekstra alan önlemek için bir diğer seçenek, sadece orada koymak getirmemektir <input id="349" type="radio" value="1" name="question1"><label for="349"> Abe</label>(etiketleri arasında herhangi bir boşluk veya yeni satır)
Arye Eidelman

1
Sadece krom ve firefox'ta kendi yöntemimi test ettim ve boşluk karakterini kaldırarak tıklanamayan alanı 7'den 3 piksele düşürdüğünü gördüm. bkz -var-bir-açıklanamaz-gap-arası-bu-inline-block-div-elementler neden . kalan üç piksel, radyo düğmesindeki varsayılan sağ kenar boşluğudur margin: 3px 3px 0 5px;(varsayılan olarak bir fareyle üzerine gelme efekti olduğundan firefox'ta daha belirgindir) ve bu, kenar boşluğunu kaldırarak ve onu dolgu ile değiştirerek CSS ile düzeltilebilir.
Arye Eidelman

1
@AryeDovEidelman: Anlıyorum, araştırdığınız için teşekkürler! Yine de basitlik için her şeyi etiketin içine koymaya devam edeceğim. =)
user21820

1

Etiket etiketi her cevabın etrafında olmalı, örneğin Abe, Andrew, vb ... ve her biri için benzersiz olmalıdır.


1

Giriş etiketini etiket etiketinin içine yerleştirmek, etiketin radyo düğmesinin hemen yanında görünmesini sağlar. Önerilen önceki yaklaşımlarla, etiket etiketini html dosyası içinde herhangi bir yere koyabilirsiniz ve tıklandığında ilgili radyo düğmesini seçecektir. Şuna bir bak:

<html>
<body>

<form>
  <p>What is my middle name?</p>
  <br>
  <input id="349" type="radio" value="1" name="question1">

  <br>
  <input id="350" type="radio" value="2" name="question1">
  <label for="350">Andrew</label>
  <br>
  <input id="351" type="radio" value="3" name="question1">

  <br>
  <input id="352" type="radio" value="4" name="question1">
  <label for="352">Anderson</label>
  <br>
</form><br/>
<p>This is a paragraph</p>
  <label for="349">Abe</label><br/>
  <label for="351">Andre</label>
  
</body>
</html>

Bunun yerine bu şekilde yapmak bu kusuru ortadan kaldırır:

<form>
  <p>What is my middle name?</p>
  <br>
  
  <label>
    <input id="349" type="radio" value="1" name="question1"/>Abe
  </label>
  <br>
  
  <label>
    <input id="350" type="radio" value="2" name="question1"/>Andrew
  </label>
  <br>
  
  <label>
    <input id="351" type="radio" value="3" name="question1"/>Andre
  </label>
  <br>
  
  <label>
    <input id="352" type="radio" value="4" name="question1"/>Anderson
  </label>
  <br>
</form>


0

Bunu böyle yapabilirsin

 <label for="1">hi</label>
 <input type="radio" id="1" />

Dolayısıyla, metne veya etikete tıklarsanız, radyo düğmesini seçer. Ama bunu yaparsan ...

<label for="1">//</label>

ve bunu, bundan hemen önce yazdığım koda eklerseniz, 2. etikete tıklarsanız, o da radyoyu seçecektir.


0

Bunu yıllardır yapıyorum, ancak bunların ikisi de değişkenleri kullanarak benim için işe yaramıyor.

    echo "<input type='radio' name='student' id='$studentID' value='$studentID'>
        <label for='$studentID'>$fname</label> $lname<br />\n";
    echo "<input type='radio' name='student' id='$studentID' value='$studentID'>
        <label for='$studentID'>$fname $lname</label><br />\n";

ve işte kaynak:

        <input type='radio' name='student' id='986875' value='986875'>
        <label for='986875'>John</label> Brown<br />
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.