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

时间:2015-07-10 08:12:06

标签: javascript jquery

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

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

为了让我不再向每个.on("click", .off("click",前面的相同元素添加越来越多的点击事件,我认为这是正确的$("#myForm").submit(function(e){...处理这个的方法?

我的功能还有以下内容: $("#myTextArea").focus(function(e){... 和... .off

我的问题是: 我是否需要"解开" (因为想要一个更好的词).submit和.focus的功能与我做"点击"相同。函数是为了在每次调用函数时停止这些事件乘以这些元素吗?

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

非常感谢

约翰: - )

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

我的页面包含3个弹出窗口,由3个独立按钮启动。弹出窗口的开始只有一个" loading.gif"在他们中。当点击每个按钮时,我测试是否" loading.gif"在窗口中是活动的,如果是,我使用ajax请求来获取该窗口的正确HTML。

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

如果他们然后关闭该窗口并打开其他一个弹出窗口,我需要重新调用该函数,因此要确保我不会将每个HTML元素的事件加倍。因此,我先将事件.on转回.icon { font-family: "icons"; font-size: 50px; background-color: red; }

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

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

2 个答案:

答案 0 :(得分:5)

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

示例:

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

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

解释:

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

答案 1 :(得分:3)

您尝试使用preventDefault

$("#myForm").submit(function(e){
   e.preventDefault();
   //to do anything
});