每次打开弹出窗口时都会调用保存这些事件的函数
我有一个需要在页面上多次调用的函数。该函数包含一些.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但是隐藏的弹出窗口,但我发现我的页面大小非常大,我希望改善加载时间等。
答案 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
});