0

Я прибегая к помощи в течение 2 часов, чтобы установить следующую задачу (другие StackOverflow вопросы включены):Internet Explorer 8 получить значение RadioButton

<script type="text/javascript"> 
    jQuery(document).ready(function() { 
     jQuery('input[type="radio"]').unbind('click.preset') 
     .bind('click.preset', function() { 
      doingStuffWith(jQuery(this).val()); 
     }); 
    }); 
</script> 

<input type="radio" name="lightType" value="led" /> 
<input type="radio" name="lightType" value="tube" /> 

Как вы можете видеть, я просто пытаюсь получить текущее значение группы переключателей «lightType» для работы с ним. Это работает как шарм в Firefox/Safari/Chrome, но IE8 дает мне трудное время, просто вернув пустую строку.

Я уже пробовал несколько хаков из других вопросов, таких как привязка события изменения к радиокнопкам и принуждение IE8, чтобы запустить его, размыв щелкнув переключатель и т. Д. Может быть, я , просто страдая от слепоты прямо сейчас.

Я работаю с последней версией jQuery, и я уверен, что никакие другие связанные события не мешают. Интересно, хотя, добавив предупреждение() перед извлечением значения и IE возвращает текущее значение:

.... 
// DOES WORK 
alert(); 
alert(jQuery(this).val()); // alerts e.g. "tube" 

// DOESN'T WORK 
alert(jQuery(this).val()); // alerts "" 

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

Спасибо заранее, я надеюсь, что я просто слепой и не нашел другого уродливого поведения в IE8.

+0

Помогите мне узнать, почему не только: 'JQuery ('вход [тип =" радио "] '). on (' change ', function() { doStuffWith (jQuery (this) .val()); });' –

+0

Слушатель изменений в IE запускает **, когда управление теряет фокус **, которая соответствует спецификации W3C, но не интуитивно понятна, а не как другие браузеры ее реализовали (они эффективно используют ее как клик для флажков и переключателей). Следовательно, для этих элементов обычно используется прослушиватель кликов. – RobG

ответ

0

Благодарим вас за ответы, но никто не работал. Я не уверен, что это ошибка в jQuery или это просто проблема, с которой я столкнулся в моем конкретном случае. Кажется, что jQuery заставляет IE8 запускать событие изменения до того, как поле действительно изменится.

Я наконец решил ее путем привязки к событию размытия и сочетая его с powtacs: проверено решение так:

<script type="text/javascript"> 
jQuery(document).ready(function() { 

    jQuery('input[type="radio"]').unbind('click.preset') 
    .bind('click.preset', function() { 
     jQuery(this).blur(); 
    } 

    jQuery('input[type="radio"]').unbind('blur.preset') 
    .bind('blur.preset', function() { 
     doingStuffWith(jQuery('input[type="radio"]:checked').val()); 
    }); 
}); 
</script> 
0

Я хотел бы использовать последнюю версию JQuery и on() и селектор :checked в функции обратного вызова:

jQuery(document).ready(function() { 
    jQuery('input[type="radio"]').on(function('change blur mousedown click') { 
     alert(jQuery('input[type="radio"]:checked').val()); 
    }); 
}); 

На самом деле это немного сложно, вы не можете получить кнопку, выбранное радио с «это» в функции обратного вызова вы должны использовать другой селектор: How can I know which radio button is selected via jQuery?

+0

Возможно, я ошибаюсь, но считаю, что если вы включите изменения и щелкните по кнопке 'on', он будет дважды запускаться в некоторых браузерах. –

0

Справедливый вариант для IE8 является создание класса в каждой опции радио (!) и использовать его для выбора отмеченной опции. Семантически это немного странно, но он отлично работал со мной:

HTML

<input type="radio" name="example" class="example_class" value="1"/>#1 
<input type="radio" name="example" class="example_class" value="2"/>#2 
<input type="radio" name="example" class="example_class" value="3"/>#3 

JS

var exampleValue = $('.example_class:checked').val(); 
Смежные вопросы