$('a#foo').click(Foo());
$('a#foo').bind(Foo());
Foo
дает вам функцию, но добавление ()
после нее означает, что вы вызываете функцию вместо передачи самой функции.Поскольку вы вызываете функцию, false
заканчивается передачей на click
и bind
, очевидно, ничего не делая.Некоторые из ваших других проблем могут быть связаны с тем, что вы имитируете переключение на эту вкладку дважды (дважды вызывая обработчик событий).
var Foo = function() {
//same content and calls as before
return false;
}
$('a#foo').click(Foo);
$('a#foo').bind(Foo);
^^ должен делать то, что вы хотите.
В качестве альтернативы, есть ли лучший способ добиться результатов, которые я ищу?
В настоящее время все, что мы действительно знаем о вашем дизайне, это то, что вы звоните, используя обработчик события click для переключения вкладок.Эта часть потрясающая, но нам понадобится больше информации, чтобы дать вам более глубокий ответ, который вы действительно хотите.Если вы разместите код внутри 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;
}
Чтобы сделать методы экземпляра класса, вы используете атрибут prototype. Однако Я только что понял, что получил супер не по теме.Подробнее об этом здесь и здесь .: D