0

次のコードがあります。

<form [attributes]>
  <input class="bound" type="radio" name="radioGroup" value="1" id="Radio1" />
  <label for="Radio1">One</label>

  <input class="bound" type="radio" name="radioGroup" value="2" id="Radio2" />
  <label for="Radio2">Two</label>

  <input type="submit" value="Submit" />
</form>

現在、この内容は事前に入力されているため、ユーザーがこのページにアクセスした場合、ラジオ ボタンが事前に選択されている可能性があります。しかし、ラジオボタンがクリックされてもイベントハンドラーを起動したいので、$.on()「クリック」と「変更」を使用して2つ使用しています。

<script type="text/javascript">
  $(function() {
    $(document.body).on('click', '.bound', function(event) {

      console.log( 'called click handler' );
      event.stopPropagation();

    });
    $(document.body).on('change', '.bound', function(event) {

      console.log( 'called change handler' );
      event.stopPropagation();

    });

  });
</script>

ラジオ ボタンをクリックすると、両方のイベントが発生します。イベントを 1 つだけ発生させたいと考えています。これを達成するための可能な/実行可能な方法はありますか? 私はうまくいくと思っevent.stopPropagation()event.stopImmediatePropagation()いましたが、そうではないようでした。

4

2 に答える 2

1

2 つのイベント ハンドラーは必要ないと思います。

$(function () {
    $(document.body).on('change', '.bound', function (event) {
        console.log('called change handler');
    });
    // fire it for pre-selected
    $('.bound:checked').change();
});

動作デモ。

</p>

于 2012-09-22T07:16:09.240 に答える
-1

おそらく event.stopImmediatePropagation() を使用したいでしょう

これにより、残りのサブスクライバーを起動しないように jQuery に指示します。

http://api.jquery.com/event.stopImmediatePropagation/

于 2012-09-22T07:13:25.213 に答える