2013-05-07 1 views
1

У меня есть следующие настройки обработчикаПочему change() вызван только для приема радио?

form.find("input[name=url_source]").change(function() { 
      updateUrlSource(jQuery(this)) 
      }); 

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

function updateUrlSource(source) { 
    if(source.is(':checked')) { 
     // ... 
    } 
    else { 
     // ... 
    } 
} 

ли это? Зачем?

+0

Моя догадка событие изменение происходит только на одной который инициировал изменение (тот, который был нажат), поэтому .is (': checked') всегда будет правдой. –

+0

use '.on (" click ", function()' insteand – mplungjan

+2

Это радиокнопки - они должны иметь одно и то же имя в одной группе. – Floremin

ответ

5

Но на самом деле я вижу в отладчике, что только один вызов происходит, и только первое условие удовлетворяет ниже:

Правильно, change только обстрелял вход, который получил чек, а не другие который (возможно,) потерял его. Подробности похоронили где-то in this section of the spec, но я считаю, что это критический бит:

Если элемент является изменяемым, то: Предварительно нажмите шаги активации состоит из установки checkedness элемента к истине. Отмененные шаги активации состоят в том, чтобы установить проверку элемента на значение false. Активационное поведение заключается в том, чтобы запустить простое событие, в котором пузырьки называются change.

(! Мой акцент, и большое спасибо Barmar для оказания помощи)

Вот пример: Live Copy

<!DOCTYPE html> 
<html> 
<head> 
<meta charset=utf-8 /> 
<title>Radio Behavior</title> 
    <style> 
    label { 
     display: block; 
    } 
    </style> 
</head> 
<body> 
    <p>(Look in the console for the output as you click...</p> 
    <hr> 
    <label><input type="radio" name="group1" id="g1-1"> Group 1 one</label> 
    <label><input type="radio" name="group1" id="g1-2"> Group 1 two</label> 
    <label><input type="radio" name="group1" id="g1-3"> Group 1 three</label> 
    <hr> 
    <label><input type="radio" name="group2" id="g2-1"> Group 2 one</label> 
    <label><input type="radio" name="group2" id="g2-2"> Group 2 two</label> 
    <label><input type="radio" name="group2" id="g2-3"> Group 2 three</label> 
</body> 
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
    <script> 
    (function($) { 
     $("input[type=radio][name=group1]").change(function() { 
     console.log("group 1 changed to: " + this.id); 
     }); 
     $("input[type=radio][name=group2]").change(function() { 
     console.log("group 2 changed to: " + this.id); 
     }); 
    })(jQuery); 
    </script> 
</html> 
+1

Somoene else "получил это ». – Barmar

+1

Соответствующая строка в документации: _Активация - это запуск простого события, которое пузырьки называются __change __ в элементе. Это относится к активируемому элементу, то есть к кнопке, на которую вы нажимаете. – Barmar

+0

@Barmar: Спасибо! Я * подумал *, что это была соответствующая строка, а затем решил, что я не был достаточно уверен, чтобы на самом деле * сказать * так. :-) –

Смежные вопросы