Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не работает toggle (https://javascript.ru/forum/jquery/37374-ne-rabotaet-toggle.html)

Алек 17.04.2013 16:04

Не работает toggle
 
День добрый, я вот пишу скрипт чтоб по клику на блок изображение сворачивалось и текст блока менялся, а при повторном клике блок разворачивался и текст блока обратно менялся.
Вот сам код:
$('#div_tog').toggle(function(){
$('#div_img').fadeOut(1000);
$(this).text('Развернуть');
}, function(){
$('#div_img').fadeIn(1000);
$(this).text('Свернуть');
});
Вставляю вместо toggle hover, сам код работает, а когда toggle сам блок мгновенно сворачивается и всё, в чём здесь может быть проблема и как осуществить этот скрипт с помощью toggle?

tsigel 17.04.2013 16:26

Потому что в последней версии jQuery больше нет этого метода (по крайней мере в этом применении)

Алек 17.04.2013 16:33

Это катастрофа! А как же тогда мне осуществить данную задачу, есть идеи?

tsigel 17.04.2013 16:37

Самое простое решение - флаг.
var flag = new Boolean(true);//Создаем логическую переменную (со значением true)

$('selector').click(function() {
  if (flag) {//Если flag == true
    flag = false;//Меняем значение переменной flag
    func1.call(this);//Вызываем func1 с контекстом этой функции (т.е. в вызванной функции this = this этой функции)
  } else {//Если flag не равно true
    flag = true;
    func2.call(this);
  }
  return false;
});

function func1() {...};
function func2() {...};


Но в общем никто не мешает вам пользоваться не последней версией jQuery.

tsigel 17.04.2013 16:44

jQuery написан на javascript и никакой магии в нем нет. Любой его метод можно написать самостоятельно.

Алек 17.04.2013 16:55

Цитата:

Сообщение от tsigel (Сообщение 246712)
jQuery написан на javascript и никакой магии в нем нет. Любой его метод можно написать самостоятельно.

Хорошо бы ещё понять как это сделать!
Потому что у меня чё-то всё равно не получается данную задачу решить.

tsigel 17.04.2013 17:07

Вы решение с флагом пробовали? Что говорит консоль? Сделайте тестовый пример.

Алек 17.04.2013 17:24

Первый раз пробовал, ошибка была в if (flag) иф проперти ай ди,
Потом ошибки не было, но скрипт не работал, сейчас вот так делаю:
var flag = new Boolean(true);

$('#formHide').click(function(){
if (flag) {
flag = false;
func1.call(this);
}else {
flag = true;
func2.call(this);
}
return false;
});

function func1(){
$('#forheader').fadeOut(3000)};
function func2(){
$('#forheader').fadeIn(3000)};
Всё заработало!
Спасибо бааальшое. flag это реально круто.

Алек 17.04.2013 17:26

Но я всё равно не очень понимаю как это работает, буду разбираться сейчас на другом примере. Если есть ссылки на материалы по этой теме, поделитесь плиз.

tsigel 17.04.2013 17:35

Я добавил комментарии к своему коду (выше).

В данном коде я использовал:
call,
boolean,
if


Часовой пояс GMT +3, время: 09:25.