2009-07-27 4 views
212
<input type="checkbox" name="filter" id="comedyclubs"/> 
<label for="comedyclubs">Comedy Clubs</label> 

Если у меня есть флажок с меткой, описывающей его, как я могу выбрать ярлык с помощью jQuery? Было бы проще дать ярлыку ярлык ID и выбрать его с помощью $(#labelId)?jQuery selector для ярлыка флажка

ответ

386

Это должно работать:

$("label[for='comedyclubs']") 

Смотрите также: Selectors/attributeEquals - jQuery JavaScript Library

+3

Для браузеров Webkit (Safari/Chrome) вы можете использовать '$ ('# comedyclubs') [0] .labels' для доступа ко всем меткам, присвоенным' # comedyclubs'. – Matt

+1

Используйте .text() для преобразования объекта в строку: alert ($ ("label [for = 'comedyclubs']"). Text()); – Loren

+0

просто используя $ ("label [for = 'comedyclubs']"), вы получите значение, но оно сделает ярлык пустым. поэтому, используйте $ ("label [for = 'comedyclubs']"). text() – shahil

40

Это следует сделать это:

$("label[for=comedyclubs]") 

Если у вас есть не алфавитно-цифровых символов в идентификаторе, то вы должны окружить Аттрибут с котировками:

$("label[for='comedy-clubs']") 
+2

Странно, как слава репутации, когда этот ответ был отправлен в ту же минуту, что и ведущий. :) – sscirrus

+3

@sscirrus его единственные интернет-точки :) –

5

Другим решением может быть:

$("#comedyclubs").next() 
+12

это может быть не самое стабильное решение, так как для этого флажка всегда нужно быть следующим элементом после флажка. графическая реорганизация может нарушить эту логику. – Kip

+3

правый!но в этом случае отлично работает: D и для более безопасной версии litle мы можем определить .next ('label') или .prev ('label'). – Briganti

+0

Небольшое улучшение стабилизации было бы следующим: '$ (« # comedyclubs »). NextAll(). First()' – sscirrus

60
$("label[for='"+$(this).attr("id")+"']"); 

Это позволит вам выбрать метки для всех полей в цикле, а также. Все, что вам нужно, чтобы ваши метки должны были указывать for='FIELD', где FIELD - это идентификатор поля, для которого эта метка определена.

+4

Это отличный ответ для тех, у кого более одного поля. Этот ответ должен быть №1. – 2013-04-28 08:03:56

0

Благодаря Кипы, для тех, кто может быть ищут для достижения того же с помощью $ (это) в то время как итерация или ассоциирования в функции:

$("label[for="+$(this).attr("id")+"]").addClass("orienSel"); 

я смотрел на некоторое время, пока работает этот проект, но не может найти хороший пример, поэтому я надеюсь, что это поможет другим, кто может решить эту проблему.

В приведенном выше примере моя цель состояла в том, чтобы скрыть радиовходы и стилизовать метки, чтобы обеспечить пользовательский интерфейс slicker (изменение ориентации блок-схемы).

Вы можете see an example here

Если вам нравится пример, вот CSS:

.orientation {  position: absolute; top: -9999px; left: -9999px;} 
    .orienlabel{background:#1a97d4 url('http://www.ifreight.solutions/process.html/images/icons/flowChart.png') no-repeat 2px 5px; background-size: 40px auto;color:#fff; width:50px;height:50px;display:inline-block; border-radius:50%;color:transparent;cursor:pointer;} 
    .orR{ background-position: 9px -57px;} 
    .orT{ background-position: 2px -120px;} 
    .orB{ background-position: 6px -177px;} 

    .orienSel {background-color:#323232;} 

и соответствующая часть JavaScript:

function changeHandler() { 
    $(".orienSel").removeClass("orienSel"); 
    if(this.checked) { 
     $("label[for="+$(this).attr("id")+"]").addClass("orienSel"); 
    } 
}; 

Альтернативный корень к оригиналу вопрос, учитывая, что метка следует за входом, вы можете пойти с чистым решением css и вообще не использовать JavaScript ...:

input[type=checkbox]:checked+label {} 
Смежные вопросы