Tıklanabilir bir etikete sahip bir onay kutusu nasıl oluşturulur?


Yanıtlar:


1915

Yöntem 1: Etiket Etiketini Sarın

Onay kutusunu bir labeletikete sarın :

<label><input type="checkbox" name="checkbox" value="value">Text</label>

Yöntem 2: forÖzniteliği Kullanma

forÖzelliği kullanın (onay kutusuyla eşleşin id):

<input type="checkbox" name="checkbox" id="checkbox_id" value="value">
<label for="checkbox_id">Text</label>

NOT : Kimlik sayfada benzersiz olmalıdır!

açıklama

Diğer cevaplar bundan bahsetmediği için, bir etiket en fazla 1 girdi içerebilir ve forniteliği atlayabilir ve bunun içindeki girdi için olduğu varsayılacaktır.

W3.org'dan alıntı (benim vurgu ile):

[For niteliği] tanımlanmış etiketi başka bir kontrolle açıkça ilişkilendirir. Var olduğunda, bu özniteliğin değeri, aynı belgedeki başka bir denetimin id özniteliğinin değeri ile aynı olmalıdır. Yokken, tanımlanan etiket öğenin içeriğiyle ilişkilendirilir.

Bir etiketi dolaylı olarak başka bir kontrolle ilişkilendirmek için kontrol elemanının LABEL elemanının içeriğinde olması gerekir . Bu durumda, LABEL yalnızca bir kontrol elemanı içerebilir . Etiketin kendisi, ilişkili kontrolden önce veya sonra konumlandırılabilir.

Bu yöntemi kullanmanın bazı avantajları vardır for:

  • idHer onay kutusuna bir atamaya gerek yok (harika!).

  • İçinde ekstra özniteliği kullanmaya gerek yok <label>.

  • Girişin tıklanabilir alanı da etiketin tıklanabilir alanıdır, bu nedenle onay kutusunu kontrol edebilecek iki ayrı yer yoktur - yalnızca bir tane, ne kadar uzak <input>ve gerçek etiket metni olursa olsun ve ne tür bir CSS olursanız olun uygula.

Bazı CSS ile demo:

label {
 border:1px solid #ccc;
 padding:10px;
 margin:0 0 10px;
 display:block; 
}

label:hover {
 background:#eee;
 cursor:pointer;
}
<label><input type="checkbox" />Option 1</label>
<label><input type="checkbox" />Option 2</label>
<label><input type="checkbox" />Option 3</label>


14
Bayıldım, ama lütfen tekrar düzenleyin. Bu yalnızca onay kutuları için iyidir. İnsanları diğer girişlerini etiketlerle sarmaya teşvik etmeyelim, çünkü bu ızgara sistemini kırıyor ve mobil yanıt verebilirlik daha zor olacak
Max

1
Eğer birisi @John'un bıraktığı yorumu açıklayabilirse, bana hiç mantıklı gelmiyor.
Wesley Murch

16
@John, özellikle bootstrap için bir işaretleme kılavuzu. Bir çerçeve kullanmıyorsanız veya farklı bir çerçeve kullanıyorsanız, tamamen iyi olmalıdır. Yanıtınız için teşekkürler.
Wesley Murch

3
@John. Bağladığınız sayfada, bootstrap örnekleri etiketli tüm onay kutularını işaretler, belirttiğiniz gibi herhangi bir uyarı görmüyorum, belki de artık en son bootstrap ile alakalı değil.
user2144406

2
Bugün öğrendiğim gibi, Yöntem 1 ve Yöntem 2'yi karıştırmayın. Onay kutusunu bir etikete sarırsanız ve for'u eklerseniz, etikete tıklamak onay kutusunu tetiklemez.
BBlake

50

Etiketin girişle ilişkili olduğundan emin olun.

<fieldset>
  <legend>What metasyntactic variables do you like?</legend>

  <input type="checkbox" name="foo" value="bar" id="foo_bar">
  <label for="foo_bar">Bar</label>

  <input type="checkbox" name="foo" value="baz" id="foo_baz">
  <label for="foo_baz">Baz</label>
</fieldset>

1
İki onay kutusuna aynı adı ve farklı değerleri vermiş olmanız beni şaşırttı. Bu bilerek mi?
LarsH

2
@LarsH - Evet, onay kutusu gruplarını bu şekilde oluşturuyorsunuz.
Quentin

Teşekkürler. Ben bakıyordum w3.org/wiki/HTML/Elements/input/checkbox ve bu konuda yardımcı olmadı.
LarsH

2
PHP ile, $ _POST ['foo'] her seferinde en fazla iki değerden birine sahip olmayacak mı? Her ikisi de işaretlenmiş olsa bile. Onay kutusu grubu nedir?
jeromej

2
@JeromeJ: php doğru işlemek için için, adı, örneğin için köşeli parantez eklemek zorunda: <input type="checkbox" name="foo[]" value="bar" ...>. Bu, tüm işaretli kutuların (bu ada sahip) değerlerini içeren bir dizi verecektir . Örneğin $_POST['foo'][0]olabilir barve $_POST['foo'][1]olabilir baz(her ikisi de işaretliyse).
Levite

11

Ayrıca, onay kutunuzun tüm değer değerlerinden (sırasıyla) etiketlerinizi seçmek ve görüntülemek için CSS sözde öğelerini de kullanabilirsiniz.
Düzenleme: Bu yalnızca webkit ve göz kırpma tabanlı tarayıcılarla (Chrome (ium), Safari, Opera ....) ve dolayısıyla çoğu mobil tarayıcıyla çalışır. Hiçbir Firefox veya buraya IE desteği.
Bu, yalnızca webkit / blink uygulamalarınıza gömülürken faydalı olabilir.

<input type="checkbox" value="My checkbox label value" />
<style>
[type=checkbox]:after {
    content: attr(value);
    margin: -3px 15px;
    vertical-align: top;
    white-space:nowrap;
    display: inline-block;
}
</style>

Tüm sözde öğe etiketleri tıklanabilir olacaktır.

Demo: http://codepen.io/mrmoje/pen/oteLl , + Bunun özü


Doğru. Gecko ve Trident ve gecko bunu sevmiyor gibi görünüyor. Bu yalnızca Webkit ve Blink ile çalışır. Cevabı güncelleyeceğim
mrmoje

3
Downvoted. Mümkün olsa da, bu kötü bir yol - birçok tarayıcıda çalışmıyor, erişilebilirlik için iyi değil.
James Billingham

Uyumluluk sorunları bir yana, bu çözüm en iyi yanıt kadar anlamsal değildir, çünkü <label> ve <input> arasındaki işaretlemede doğrudan bir ilişki yoktur
deadboy

"Webkit / Blink üzerinde çalışır" ( stackoverflow.com/questions/2587669/… ) kullanarak bir hata gibi kokar, böylece her an çalışmayı durdurabilir.
Xenos

7
<label for="vehicle">Type of Vehicle:</label>
<input type="checkbox" id="vehicle" name="vehicle" value="Bike" />

3
<label for="myInputID">myLabel</label><input type="checkbox" id="myInputID" name="myInputID />

1
Bazı okuyuculara kafa karıştırıcı olabilir, bu yüzden değiştirmelisiniz namemevcuttur değerden farklı bir şey niteliğin değerini forve idoysa nitelikleri, bu iki ilişkilidir beri namedeğildir (dahil edilecek olsa inan hala zorunludur) .
Dzhuneyt

3

Aynı zamanda çalışır:

<form>
    <label for="male"><input type="checkbox" name="male" id="male" />Male</label><br />
    <label for="female"><input type="checkbox" name="female" id="female" />Female</label>
</form>

Etiketin içinde yalnızca bir giriş öğesi bulunduğundan, örneğinizdeki forve idniteliklerini ommitleyebilirsiniz label.
Dzhuneyt

2

Bu size yardımcı olacaktır: W3Schools - Etiketler

<form>
  <label for="male">Male</label>
  <input type="radio" name="sex" id="male" />
  <br />
  <label for="female">Female</label>
  <input type="radio" name="sex" id="female" />
</form>


0

Onay kutusuyla ilişkilendirmek için labelöğeyi ve forözniteliği kullanın:

<label for="myCheckbox">Some checkbox</label> <input type="checkbox" id="myCheckbox" />



-7

Bunu kullan

<input type="checkbox" name="checkbox" id="checkbox_id" value="value">
<label for="checkbox_id" id="checkbox_lbl">Text</label>


$("#checkbox_lbl").click(function(){ 
    if($("#checkbox_id").is(':checked'))
        $("#checkbox_id").removAttr('checked');
    else
       $("#checkbox_id").attr('checked');
    });
});

9
Bunu yapmak için JavaScript kullanmak gerekli değildir. HTML içine yerleştirilmiştir.
Lasse Ranza

4
@LasseBunk, yalnızca JavaScript olsaydı, ancak bunun çalışması için jQuery kütüphanesinin tamamı gereklidir. Bakalım birisi Angular 2 çözümü bulabilir mi?
laurent
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.