【问题标题】:After execution of onclick-callback the 'checked' state is reset执行 onclick-callback 后,“已检查”状态被重置
【发布时间】:2020-08-31 05:03:37
【问题描述】:

这让我发疯。我就是看不懂。

我编写了一个基于复选框并单击其标签的过滤器功能。我正在检查复选框的“已检查”状态并显示列表的数学元素(其余元素被隐藏)。我使用 3rdparty 插件来样式化复选框(从示例中截取)并检查复选框,而其他 onClick 事件进行过滤。

问题是在回调函数中成功设置“检查”状态后,它“突然”被重置!我不明白为什么会这样。

我在这里实现了基本逻辑(没有样式化):http://jsfiddle.net/3Xtuh/13/ 请大家帮我解决这个问题。

【问题讨论】:

  • 为什么将处理程序绑定到标签而不是复选框?当你点击一个标签时,它无论如何都会在复选框上调用一个点击事件。
  • 我相信你的做法是完全错误的。你想完成什么?
  • 在我的完整实现中,复选框本身是隐藏的。并且显示程式化的图像而不是它们。访问复选框的唯一方法是单击其标签。 (我用这个插件:no-margin-for-errors.com/projects/prettycheckboxes

标签: javascript jquery checkbox onclick jquery-events


【解决方案1】:

问题是你手动调用点击事件,然后当你的函数运行完成后,默认的点击事件被调用。

通过将事件变量传递给您的点击处理程序并调用 event.preventDefault();修复此行为。

在此处查看示例:http://jsfiddle.net/3Xtuh/14/

【讨论】:

  • 本质上,您是手动设置单击状态,然后在您的函数运行完成后 - 默认 HTML 操作运行并“取消单击”您的复选框。希望这会有所帮助。
  • 现在这并不是说它会让你到达你想去的地方,但至少它可能会帮助你朝着正确的方向前进。您需要一些条件来检查点击后的状态。
  • 是的,你完全正确地重置了!但是,如果哈希包含一些要检查的元素(#ch1&ch2),您能否再给我一个关于触发 onclick 行为的提示?
  • 如果哈希包含要检查的元素,您是什么意思?您是指 URL 中的哈希元素吗?
  • 我的意思是 - 现在如果我这样做 $("label[for=" + $(this).attr("id") + "]").trigger('click'); - onclick 事件触发了两次。但我已经解决了这个错误。所以一切都好。
【解决方案2】:

HTML label 将检查关联的复选框,即使它被隐藏(使用 CSS),因此无需重新发明轮子。

您应该使用change() 事件。试试这个demo 并查看您的控制台。

【讨论】:

    【解决方案3】:

    这是默认的浏览器行为,它弄乱了你的 js 脚本。默认情况下,单击环绕复选框或具有有效for 属性集的标签会切换该复选框的checked 状态。

    您已在标签上附加了自定义 onclick 处理程序。

    那么当点击标签时发生了什么?你的点击处理程序被触发(在你改变目标复选框的状态),然后

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 2022-01-05
      • 2019-08-06
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多