jQuery - 如何删除.submit()和.focus()事件

Joh*_*n T 3 javascript jquery

每次打开弹出窗口时都会调用保存这些事件的函数

我有一个功能,我需要在页面上多次调用.该函数包含一些.on("click", function....事件.

为了我不继续增加更多的点击事件,我在前面的每一个相同的元素.on("click",.off("click",(我的理解),这是处理这个正确的方式?

我的功能还有以下几点: $("#myForm").submit(function(e){... 并... $("#myTextArea").focus(function(e){...

我的问题是:我是否需要"取消绑定"(因为想要一个更好的词).submit和.focus函数的方式与我执行"click"函数的方式相同,以便在每次使用这些元素时将这些元素相乘函数被称为?

而且,如果我这样做,这样做的正确方法是什么?

非常感谢

约翰 :-)

**更新**我已根据要求提供了更多细节.

我的页面包括由3个独立按钮启动的3个弹出窗口.弹出窗口的起点只有一个"loading.gif".当单击每个按钮时,我测试以查看窗口中的"loading.gif"是否处于活动状态,如果是,则使用ajax请求获取该窗口的正确HTML.

一旦我的ajax请求返回HTML,我将它附加到窗口然后调用此函数将事件绑定到相关的按钮/表单等.

如果他们然后关闭该窗口并打开其他弹出窗口之一,我需要重新调用该函数,因此要确保我不会将每个HTML元素的事件加倍.因此,我.off先把事件转回来然后放回去.on.

希望澄清问题背后的原因,但随时可以询问是否不清楚.我也认为谨慎地指出我是jQuery的新手(实际上是javascript),所以这当然不一定是实现此功能的最佳/唯一方式.这只是在编写代码时对我有意义的方式.

最初我有预先填充HTML但是隐藏的弹出窗口,但我发现我的页面大小非常大,我希望改善加载时间等.


Mag*_*gus 5

你可以按照自己的方式行事.您还可以使用jQuery委派系统.

示例:

你有一个div(让我们称它#test),你在其中添加一些按钮.您删除按钮,再次添加它们...但您想绑定它们上的单击事件.你可以这样做 :

$('#test').on('click', 'button', function(event) {
    // Do what you want. this == the clicked button
    $(this).css('background-color', 'red');
});
Run Code Online (Sandbox Code Playgroud)

解释:

click事件被绑定#test,但jQuery将针对css选择器测试被点击的目标button.并且this将是被点击的目标(不是#test).这样,您只需创建一次单击侦听器,并且每次创建按钮时都不必添加/删除它.