3

いくつかのチェックボックスを含むテーブルがあり、このコードを追加して、特定のテーブルセルの任意の部分をクリックするとチェックボックスがオンになるようにしました。チェックボックスがチェックされdisabledている場合、ユーザーが次のステップに移動できるようにするために、ボタンからクラスを削除する必要があります。

$('input:radio', $parent).click()このコードは Chrome では問題なく動作しますが、Safari ではが呼び出されるとすぐにウィンドウがハングします。

これを行うより正しい方法はありますか?

$('td.info, td.control').click(function() {
  var $parent;
  $parent = $(this).parent();
  $('input:radio', $parent).attr('checked', true);
  return $('input:radio', $parent).click();
});
$("input[name='package[order_option_id]']").click(function() {
  return ($("#select-interaction-link")).removeClass('disabled');
});
4

3 に答える 3

5

ハングの理由は、無限ループを引き起こしているためだと思います。コードがラジオ ボタンをクリックすると、クリックが含まれている にバブル アップし、tdハンドラーclick()が再度実行されます。

これを解決できると思います:

$("td.info input:radio, td.control input.radio").click(function(e) {
    e.stopPropagation();
}
于 2013-01-21T16:58:15.260 に答える
0

コンテキストを使用せずに試してください:

$('td.info, td.control').click(function() {
    return $(this).parent().find('input[type=radio]').attr('checked', true).click();
});
于 2013-01-21T16:58:19.573 に答える
0

これがSafariに影響しているかどうかはわかりませんが、ラジオをチェックしたい場合は、これを変更してください

$('input:radio', $parent).attr('checked', true);

これに

$('input:radio', $parent).prop('checked', true); // Uses the js property value

また

$('input:radio', $parent).attr('checked', 'checked'); // Uses the attribute

また、イベントがバブルアップすることも覚えておいてください...ここでラジオのクリック機能を明示的に呼び出すことで何らかのループを作成できるかどうかはわかりませんが、Safariでステップスルーして、それが発生していないことを確認します. ただのパラノイア。

于 2013-01-21T17:01:10.593 に答える