javascript包含一次,声明一次,绑定一次

Joh*_*ong 5 javascript

有没有办法只包含一次 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”,但它不起作用。

the*_*ejh 4

是的,你可以(在 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)