寻找一个解决方案,作为radiobutton.click()挂Safari,但在Chrome中工作

Looking for a workaround, as radiobutton.click() hangs Safari but works in Chrome

本文关键字:Safari 但在 Chrome click 工作 作为 一个 解决方案 寻找 radiobutton      更新时间:2023-09-26

我有一个表,其中有一些复选框,我已经添加了这段代码,以便当您单击特定表格单元格的任何部分时,复选框被选中。当复选框被选中时,我需要从按钮中删除disabled类,以便允许用户移动到下一步。

这段代码在Chrome中工作得很好,但在Safari中,当$('input:radio', $parent).click()被调用时,它会立即挂起窗口。

是否有更正确的方法来做这件事?

$('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');
});

我认为挂起的原因是你造成了一个无限循环。当代码点击单选按钮时,点击弹出到包含td,这导致您的click()处理程序再次运行。

我认为你可以这样解决:

$("td.info input:radio, td.control input.radio").click(function(e) {
    e.stopPropagation();
}

尝试不使用上下文:

$('td.info, td.control').click(function() {
    return $(this).parent().find('input[type=radio]').attr('checked', true).click();
});

我不知道这是否会影响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

还要记住事件会冒泡…不确定是否可以通过显式调用单选框上的click函数来创建某种循环但我会在Safari中逐步执行确保不会发生这种情况。只是偏执。

相关文章: