为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我们需要jQuery点击事件在回调中

为什么我们需要jQuery点击事件在回调中

海绵宝宝撒 2022-09-02 21:23:25
嗨,我正在使用jquery回调函数来检查复选框的状态。我正在使用以下代码,但我不明白为什么我们需要在回调中再次使用单击事件。包含代码后,它工作正常。谁能告诉我这个机制与插图真的有帮助。提前致谢。 function notify() {       if (jQuery('input[type=checkbox]').is(':checked')) {           ...       } else {        ....       }          jQuery("#dummy").on("click", notify); // Why i need this to do it again          //Is it will work like recursive function     }  jQuery(document).ready(function(){        jQuery("#dummy").on("click",notify); //This is my callback   });
查看完整描述

2 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

生产线

jQuery("#dummy").on("click", notify);

真的不应该在回调中。顺便说一句,它不会单击按钮,而是注册另一个“单击”侦听器。而且每次单击时,不仅只有一个,而且还有一个额外的侦听器。

第一次单击,调用一个侦听器并调用“notify”。这增加了第二个。

第二次单击时,调用两个 listner,两个都添加另一个,总共最多 4 个。接下来单击它是 8,然后是 16,...点击几下后,您的系统应该会变慢。

因此,在 notify 方法中删除该方法。


查看完整回答
反对 回复 2022-09-02
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

为什么我们需要在回调内部使用jQuery点击事件

当且仅当您删除的位替换为一些新的HTML时,您才会(可以)执行此操作。...#dummy

然后,原始的单击事件将被删除(因为它引用的元素将不再存在) - 因此您需要为新的HTML添加事件处理程序。

使用事件委派可以更好地处理此方案。


另一种方法是,如果您更改为确保一次只单击一次(例如,如果单击事件处理程序执行一些ajax,并且您不希望用户在保存现有数据时再次单击它(例如))。.on.one

然后,在处理完成后重新添加 .one 事件。

鉴于提供的(有限的)代码,这似乎不是您的问题中的场景(因为没有ajax可以“等待”)。如果按钮上有视觉更新(例如灰显),也会更好。


查看完整回答
反对 回复 2022-09-02
  • 2 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信