функция обратного вызова jquery

#jquery

#jquery

Вопрос:

У меня есть функция обратного вызова следующим образом

 $('#lnkClientData').click(function() {


        $('#clientdiv').slideToggle(function(){
            if($('#lnkClientData').hasClass('open'))
            {

                $('#divnext').slideToggle();
                $('#lnkClientData').removeClass('open').addClass('close');
            }
            else
            {

             $('#divnext').slideToggle();
             $('#lnkClientData').removeClass('close').addClass('open');
            }
        }
        );
     });
  

Я хочу, чтобы $('#divnext').slideToggle(); код выполнялся перед внешней $('#clientdiv').slideToggle() функцией….
Прямо сейчас внешняя функция вызывается первой….то, что я пытаюсь сделать, это скрыть привязку, когда div вставляется … но это происходит до того, как div вставляется…

   if($('#clientDiv').is(':visible'))
             {
             alert('');
               //  $('#divnext').hide();
                 //$('#clientDiv').slideToggle(); // Or whatever animation you want
             }
             else
             {
                 //$('#clientDiv').slideToggle(function() // Or whatever animation   you   want
                 //{
                   //  $('#divnext').show();
                 //});
             }
  

Комментарии:

1. Можете ли вы поделиться демонстрационной ссылкой на jsfiddle или jsbin?

2. Я сделал то, что вы, ребята, упомянули, но я просто добавил комментарий к первому ответу… я надеюсь, что это прояснит ситуацию….

Ответ №1:

Затем вам просто нужно изменить порядок вашего кода (не зная особенностей вашей реализации slideToggle, я предполагаю, что ваш параметр является обратным вызовом по завершении слайда)

  $('#divnext').slideToggle(function()
 {
     // Code here executes after slide is finished but before clientdiv starts
     $('#clientdiv').slideToggle(function()
     {
          // Code here executes after both slides are done
     });
 });
  

Редактировать:

В вашей ситуации просто использовать один метод slideToggle для отображения / скрытия клиентского div — не лучшая идея.

  if($('#clientDiv').is(':visible'))
 {
     $('#yourLink').hide();
     $('#clientDiv').slideDown(); // Or whatever animation you want
 }
 else
 {
     $('#clientDiv').slideUp(function() // Or whatever animation you want
     {
         $('#yourLink').show();
     });
 }
  

Комментарии:

1. Спасибо … это действительно близко к тому, что я хотел … но теперь, когда внешний div выдвигается …. внутренний div появляется перед открытием div…. позвольте мне объяснить … у меня есть div… и имя привязки «next» внутри div… когда кто-то открывает div… этот следующий якорь должен появиться после открытия всего div, и когда кто-то закрывает div, следующий якорь должен исчезнуть до закрытия div….

2. Затем все, что вам нужно сделать, это изначально скрыть div. Когда clientDiv завершит переключение, просто вызовите $('#yourLink').show() or hide() в зависимости от его видимости.

3. Я в замешательстве .. можете ли вы объяснить немного подробнее… основной div — это клиент, и когда он завершает переключение, я должен отобразить или скрыть ссылку … а также, что это скрытие и показ должны быть вне функции обратного вызова переключателя function….am я прав??

4. Я постараюсь связаться с вами, если возникнут какие-либо проблемы …. я добавлю еще один комментарий… но я знаю, что смогу это сделать… Большое спасибо, чувак

5. Смотрите мой вопрос, я собираюсь отредактировать его … я делаю то, что вы сделали после части редактирования ….. но uit, похоже, не выдает предупреждение … пожалуйста, обратитесь к моему коду в вопросе

Ответ №2:

Код code настроен для переключения lnkClientData, затем, когда это будет сделано, переключите clientdiv, если вы поменяете их местами в ie:

 $('#divnext').click(function() {
    $('#clientdiv').slideToggle(function(){
        if($('#lnkClientData').hasClass('open'))
        {

            $('#lnkClientData').slideToggle();
            $('#lnkClientData').removeClass('open').addClass('close');
        }
        else
        {

         $('#lnkClientData').slideToggle();
         $('#lnkClientData').removeClass('close').addClass('open');
        }
    }
    );
 });