1

我有以下处理程序设置

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

我在想它将附加到所有带有名称的单选按钮上。但实际上我在调试器中看到,只有一个调用发生,并且只有第一个条件满足以下条件:

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

这是真的?为什么?

4

1 回答 1

6

但实际上我在调试器中看到,只有一个调用发生,并且只有第一个条件满足以下条件:

正确,change仅在收到支票的输入上触发,而不是(可能)丢失支票的其他输入。细节隐藏在规范的这一部分,但我相信这是关键点:

如果元素是可变的,则: 点击前激活步骤包括将元素的选中状态设置为 true。取消的激活步骤包括将元素的选中状态设置为 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>
于 2013-05-07T17:24:19.570 回答