嗨,我正在使用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 方法中删除该方法。
慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
为什么我们需要在回调内部使用jQuery点击事件
当且仅当您删除的位替换为一些新的HTML时,您才会(可以)执行此操作。...
#dummy
然后,原始的单击事件将被删除(因为它引用的元素将不再存在) - 因此您需要为新的HTML添加事件处理程序。
使用事件委派可以更好地处理此方案。
另一种方法是,如果您更改为确保一次只单击一次(例如,如果单击事件处理程序执行一些ajax,并且您不希望用户在保存现有数据时再次单击它(例如))。.on
.one
然后,在处理完成后重新添加 .one 事件。
鉴于提供的(有限的)代码,这似乎不是您的问题中的场景(因为没有ajax可以“等待”)。如果按钮上有视觉更新(例如灰显),也会更好。
添加回答
举报
0/150
提交
取消