2011-01-31 3 views
1

, если у меня есть некоторые кнопки радио:

<input type="radio" name="test" value="apple"> Apple<br/> 
<input type="radio" name="test" value="banana" CHECKED> Banana<br/> 
<input type="radio" name="test" value="carrot"> Carrot<br/> 

и я затем определить группу радио в JQuery с

var test = $('input:radio[name="test"]') 

, как я могу получить значение проверяемого элемента на основе переменного теста без переписывания

var test_val = $('input:radio[name="test"]:checked').val(); 

я пытался как

$(test):checked.val(); 
test:checked.val(); 

и как часть функции изменения Я также попытался

$(test).change(function() { 
    if ($(this):checked.val() == 'no'){ 
    $('#featured').stop().fadeOut(); 
    } else if ($(this):checked.val() == 'yes'){ 
    $('#featured').stop().fadeIn(); 
    } 
}); 

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

спасибо!

ps- если IE8 не поддерживает: checked selector, что я могу использовать вместо этого? и может ли IE умереть уже?

+0

Нет бровей er поддерживает ': checked', как вы его используете. Это недопустимый синтаксис JS. Селектор всегда находится в строке. Существуют некоторые методы, которые имеют тот же эффект, что и селектор, но вызываются так же, как и обычные методы. –

ответ

5

Вы можете использовать .filter()help:

test.filter('input:checked') 

.filter() делает также поддерживает функцию обратного вызова:

test.filter(function() { 
    return this.name === 'test' && this.checked 
}); 

Я не знал, что селектор :checked не работает с IE8. Если это так, то последний пример должен работать (напрямую обращаться к узлу expando)

+0

+1, но 'filter (': checked')' было бы достаточно, я думаю. –

+0

@FelixKling: действительно, обновлено – jAndy

+0

И я думаю, что OP только пришел к выводу, что ': checked' не работает в IE8, потому что используемый им синтаксис не работает. jQuery обязательно убедитесь, что он работает во всех браузерах. –

0

Вы пытаетесь смешать «синтаксис CSS» с синтаксисом JavaScript. Это не сработает.

Вы можете использовать filter() метод JQuery, чтобы ограничить элементы, выбранные с предыдущим JQuery запроса:

var test = $('input:radio[name="test"]') 

var test_val = test.filter(":checked").val(); 
0

попробовать это ...

$(test).change(function() { 
if ($(this).is(':checked').val() == 'no'){ 
    $('#featured').stop().fadeOut(); 
} else if ($(this).is(':checked').val() == 'yes'){ 
    $('#featured').stop().fadeIn(); 
} 
}); 
0

Startibg из var test, вы можете использовать .filter(), как показано в этом документе jsFiddle

var test = $('input:radio[name="test"]'); 
alert(test.filter(':checked').val()); 
Смежные вопросы