Функция радио protectDefault () не работает на Chrome и FF 3.6, но работает на IE9 и Opera - PullRequest
0 голосов
/ 12 мая 2011


Вот демоверсия .

У меня есть следующий HTML:

<div  class="Q">
<div id="Q3"><span>1. </span>Which of the following is a string?</div>
<div class="A"><input type="radio"  id="Q3A1Correct" /></div> 
<div class="A"><input type="radio"  id="Q3A2Correct"/></div>
<div class="A"><input type="radio" id="Q3A3Correct" checked/></div>
<div class="A"><input type="radio"  id="Q3A4Correct" /></div>
</div>
<div  class="Q">
<div id="Q1"><span>2. </span>Which of the following have the same meaning?</div>
<div class="A"><input type="checkbox"  id="Q2A1Correct" /></div> 
<div class="A"><input type="checkbox"  id="Q2A2Correct" /></div>
<div class="A"><input type="checkbox" id="Q2A3Correct" checked/></div>
<div class="A"><input type="checkbox"  id="Q2A4Correct" /></div>
</div>  

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

    $(':checkbox[id$="Correct"]').click(function (event) {        
        event.preventDefault();
    });
    $(':radio[id$="Correct"]').click(function (event) {        
        event.preventDefault();
    });

И он работал для флажков во всех браузерах, но для радио работал на IE9 и Opera, но не на FF 3.6.17 и Chrome.
Поэтому мне интересно, почему это так, но мне также нужно обойти это, чтобы он работал во всех браузерах.

Спасибо.

Ответы [ 2 ]

1 голос
/ 12 мая 2011

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

так для html

<div  class="Q">
    <div id="Q3"><span>1. </span>Which of the following is a string?</div>
    <div class="A"><input type="radio"  name="foo" /></div>
    <div class="A"><input type="radio"  name="foo"/></div>
    <div class="A"><input type="radio" name="foo" checked/></div>
    <div class="A"><input type="radio"  name="foo"/></div>
</div>

и для jQuery

$('[name="foo"]:radio').click(function(event) {
    event.preventDefault();
});

рабочая демонстрация

0 голосов
/ 03 июля 2014

Если бы радио не проверялось, мое решение было бы

var radioChecked;
$element.bind('mousedown', function (event) {
    radioChecked = $element.is(':checked');
    $element.one('click', function (event) {
        $element.prop('checked', radioChecked);
        return false;
    });
});

, так как, когда ни один радио в группе не проверен, первый щелчок не будет предотвращен.

...