Правильное использование JQuery переключения? - PullRequest
2 голосов
/ 17 сентября 2011

В этом ответе stackoverflow

$('#user_button').toggle(function () {
    $(".hello").addClass("active");
}, function () {
    $(".hello").removeClass("active");
});

Функция обратного вызова jQuery .toggle используется для добавления и удаления классов для элемента. Теперь согласно документации jQuery .toggle , .toggle изначально используется для переключения между состояниями видимости выбранного элемента.

Я сделал демо jsfiddle: http://jsfiddle.net/taheri/nYdng/

В моем примере здесь, кажется, чередуются только функции обратного вызова, и видимость самого #user_button не переключается . Что я упускаю в документации здесь? Может ли переключение использоваться только для переключения между функциями?

Спасибо!

Ответы [ 5 ]

4 голосов
/ 17 сентября 2011

Существует два метода переключения ... this one и this one. Им следовало бы назвать их по-другому, чтобы избежать этой путаницы.

1 голос
/ 17 сентября 2011

Из предоставленной вами ссылки на документацию jquery:

Примечание. В комплекте обработки событий также есть метод с именем .toggle ().Выбор одного из них зависит от набора переданных аргументов.

Поскольку в качестве аргументов передаются две функции, вместо этого вызывается функция toggle() набора обработки событий.

0 голосов
/ 17 сентября 2011

в jQuery (после изучения исходного кода 1.6.2), .toggle() поддерживает ряд различных типов аргументов.Одна вещь, которую он поддерживает, передает ему две функции обратного вызова.Если это то, что вы передаете, он будет вызывать первую функцию при первом вызове, во второй раз, когда вы вызываете ее, она будет вызывать вторую функцию и будет чередоваться каждый раз.'

Когда вы передаете функции таким образом, он НЕ выполняет никаких других операций, кроме вызова ваших функций.Если вы хотите что-то скрыть и показать, вы должны сделать это в своих функциях.

Вы можете увидеть, как это работает здесь: http://jsfiddle.net/jfriend00/QGz5c/.

Документация jQuery не проясняет это.Для .toggle() должен быть только один комплект документации, описывающий все параметры, которые вы можете передать, но, как указывает Шиме, есть два совершенно разных набора документов для разных типов параметров, которые вы можете передать.

0 голосов
/ 17 сентября 2011

Для переключения между классами используется метод toggleClass() в jQuery.В jQuery есть и другие переключатели, такие как slideToggle(), которые являются просто ярлыками для функции animate.

Однако, согласно предоставленной вами ссылке, вы не можете предоставить две функции обратного вызова для метода toggle().Вы должны указать только продолжительность (необязательно), замедление (также необязательно) и обратный вызов (снова необязательно), или вы можете просто указать логическое значение.

Я проверил ваш код, и он, кажется, работаетхорошо.Тем не менее, я думаю, что этот тип использования не может быть лучшей практикой.Я все еще ищу, чтобы понять, что не так.

0 голосов
/ 17 сентября 2011

Видимость #user_button не переключается, потому что вы переключаете $(".hello").То есть

$('#user_button').toggle(function () {
    $(this).hide();
    $(".hello").addClass("active");
}, function () {
    $(this).show();
    $(".hello").removeClass("active");
});

Изменит ли видимость #user_button.

...