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 回答