猿问

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

嗨,我正在使用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

   });


海绵宝宝撒
浏览 113回答 2
2回答

杨魅力

生产线jQuery("#dummy").on("click", notify);真的不应该在回调中。顺便说一句,它不会单击按钮,而是注册另一个“单击”侦听器。而且每次单击时,不仅只有一个,而且还有一个额外的侦听器。第一次单击,调用一个侦听器并调用“notify”。这增加了第二个。第二次单击时,调用两个 listner,两个都添加另一个,总共最多 4 个。接下来单击它是 8,然后是 16,...点击几下后,您的系统应该会变慢。因此,在 notify 方法中删除该方法。

慕尼黑的夜晚无繁华

为什么我们需要在回调内部使用jQuery点击事件当且仅当您删除的位替换为一些新的HTML时,您才会(可以)执行此操作。...#dummy然后,原始的单击事件将被删除(因为它引用的元素将不再存在) - 因此您需要为新的HTML添加事件处理程序。使用事件委派可以更好地处理此方案。另一种方法是,如果您更改为确保一次只单击一次(例如,如果单击事件处理程序执行一些ajax,并且您不希望用户在保存现有数据时再次单击它(例如))。.on.one然后,在处理完成后重新添加 .one 事件。鉴于提供的(有限的)代码,这似乎不是您的问题中的场景(因为没有ajax可以“等待”)。如果按钮上有视觉更新(例如灰显),也会更好。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答