有没有办法只包含一次 javascript 文件或只声明一次函数?我遇到的问题是我有一个包含 javascript 的 HTML 模块。这个模块是循环加载的,因此该文件被加载多次。我已经解决了大部分问题,但令我烦恼的是,我知道同一个函数被多次创建,而这种外观可能多达 30 次迭代。对我来说,我不喜欢重复创建相同功能的事实。我应该关心吗?有什么办法可以防止这种情况发生吗?我知道我可以检测到函数何时存在,我可以将函数声明放在 if 语句之间吗?
我已经尝试了以下建议之一:
if(typeof btnSendInvite_click != 'function')
{
function btnSendInvite_click()
{
alert("#invite_guest_" + $(this).attr("event_id"));
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用。我也试过
if(!btnSendInvite_click)
{
function btnSendInvite_click()
{
alert("#invite_guest_" + $(this).attr("event_id"));
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用。发生的事情是我有这条线:
$(document).ready(function()
{
$(".btnSendInvite").bind("click", btnSendInvite_click);
});
Run Code Online (Sandbox Code Playgroud)
当按钮被点击时,该函数被执行六次,这是包含文件的次数,它告诉我该函数被多次创建......我想。
所以经过很多挣扎之后,这个问题正在变成与我想象的不同的东西。绑定被多次调用,因此它被多次绑定,因此多次调用该函数。我想我的下一个问题是,有没有办法只将函数绑定到控件一次?我已经尝试过 jquery“one”,但它不起作用。
是的,你可以(在 jsfiddle 上运行)。
if (!window.myFunction) {
window.myFunction = function() {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:在你的情况下,它将是:
if (!window.btnSendInvite_click) {
window.btnSendInvite_click = function() {
alert("#invite_guest_" + $(this).attr("event_id"));
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
对 的调用bind()也必须位于该条件块中的某个位置。
注意:以下变体不起作用,至少在所有浏览器上不起作用:
if (!window.myFunction) {
function myFunction() {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
编辑2:对于您的更新:
调用bind 时声明一个变量。
if (window.iBoundThatStuff!=true) {
iBoundThatStuff=true;
//call bind() here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5530 次 |
| 最近记录: |