key*_*red 4 javascript jquery bind unbind
我正在使用选项卡式界面并设置了以下jQuery函数来处理我的选项卡的单击事件.
$(document).ready(function () {
$('a#foo').click(function() {
//content, various calls
return false;
});
});
Run Code Online (Sandbox Code Playgroud)
以上是我的一个选项卡的示例,其他选项卡也在同一个文档就绪块中.我需要做的是使它无法重新点击当前选中的选项卡,在其他情况下我可以根据需要手动禁用选项卡.我通过以下方式实现了这一点:
$('a#play').unbind('click');
Run Code Online (Sandbox Code Playgroud)
这工作正常,它肯定会禁用选项卡,但问题然后重新绑定曾经存在的点击操作.我通过bind函数实现了这个目的:
$('a#foo').bind('click', function() {
//the same content and calls as before
return false;
});
Run Code Online (Sandbox Code Playgroud)
这也很好,但是因为我已经在我的UI中添加了标签,所以它变得非常混乱.直接的解决方案似乎是将函数创建为变量,然后将其传递给初始点击创建和绑定事件.像这样:
var Foo = new function() {
//same content and calls as before
return false;
}
$('a#foo').click(Foo());
$('a#foo').bind(Foo());
Run Code Online (Sandbox Code Playgroud)
由于某种原因,这似乎导致浏览器崩溃问题.在这种情况下是不可能将函数作为var传递,或者我只是做错了?或者,有没有更好的方法来实现我正在寻找的结果?谢谢.
$('a#foo').click(Foo());
$('a#foo').bind(Foo());
Run Code Online (Sandbox Code Playgroud)
该Foo给你的功能,但增加()的这意味着你以后调用的函数,而不是传递函数本身.因为你正在调用这个函数,所以false最终会被传递给,click并且bind显然没有做任何事情.您可能会因为模拟切换到该选项卡两次(调用事件处理程序两次)而导致其他一些问题.
var Foo = function() {
//same content and calls as before
return false;
}
$('a#foo').click(Foo);
$('a#foo').bind(Foo);
Run Code Online (Sandbox Code Playgroud)
^^应该做你想要的.
或者,有没有更好的方法来实现我正在寻找的结果?
目前,我们真正了解您的设计的是您使用单击事件处理程序来切换选项卡.那部分很棒,但我们需要更多信息来为您提供您真正想要的更深层次的答案.如果你在里面发布代码Foo我们应该能够帮助更多.:d
编辑:贷记给SLaks♦注意new我错过的函数声明.我将在他的解释中添加更多细节:
当你编写var foo = new function(...){...}时,你正在创建一个函数文字,然后将其作为构造函数调用.
它相当于
var SomeClass = function(...){...}; var foo = new SomeClass;
没有SomeClass虚拟变量.
这function() {}是一个你想象的匿名函数.new在javascript中有点混乱.当您调用函数并在其前面时new,您正在使用该函数来实例化函数中定义的类的实例.在JS中,与大多数其他语言不同,类的整个定义在一个构造函数中,您可以从中设置所有实例变量,如下所示:
Foo = function() {
this.a = "lala";
this.b = 5;
}
Run Code Online (Sandbox Code Playgroud)
要创建"类"的实例方法,请使用prototype属性.但是我才刚刚意识到我已经超越了主题.在这里和这里阅读更多内容.:d