Найти длину нашего контейнера при удалении JQuery Accordion? - PullRequest
0 голосов
/ 24 августа 2011

У меня есть следующий код для удаления динамически сгенерированного пользовательского аккордеона.Когда происходит удаление (которое работает), мне нужно выяснить, является ли контейнер аккордеона, который является div, пустым.Поэтому, если пользователь удаляет аккордеон и контейнер div теперь пуст, мне нужно изменить размер содержащего div (div - это панель ui.layout, которую мне нужно автоматически изменить для пользователя, когда конейнтер пуст).

Когда я удаляю аккордеон, длина остается равной 1. Мне нужно изменить размер, когда он равен 0. Возможно ли это?

$( ".delete_accordion" )
        .click(function() {
            var parent = $(this).closest('h3');
            var head = parent.next('div');
            parent.add(head).fadeOut('slow',function(){$(this).remove();});    

            //length always returns 1 in the function even though it has been removed above.
            //perhaps there is an event or method I can intercept on delete?

            var parentHasClass = parent.hasClass("accordion");   

            var isempty = ($("#accordion").length == 0);
            alert(isempty);

            if(parentHasClass == "true"){                   
                if( isempty ){
                 myLayout.sizePane("west", 100);
                }                
            }

        });

1 Ответ

1 голос
/ 24 августа 2011

$(this).remove() не вызывается до тех пор, пока не завершится fadeOut, поэтому технически длина по-прежнему равна === 1.

Вы можете исправить это, поместив оставшуюся логику удаления в обратный вызов fadeOut:

  $( ".delete_accordion" )
          .click(function() {
              var parent = $(this).closest('h3');
              var head = parent.next('div');
              parent.add(head).fadeOut('slow',function(){
                $(this).remove();
                var parentHasClass = parent.hasClass("accordion");   

                var isempty = ($("#accordion").length == 0);
                alert(isempty);

                if(parentHasClass == "true"){                   
                    if( isempty ){
                     myLayout.sizePane("west", 100);
                    }                
                }
                });    

          });   

//I modified the selector as follows and now works great! Thanks Skylar!
$( ".delete_accordion" )
          .click(function() {
              var parent = $(this).closest('h3');
              var head = parent.next('div');
              parent.add(head).fadeOut('slow',function(){
                $(this).remove();
                var parentHasClass = parent.hasClass("accordion");  
                var isempty = ($("#accordion h3").length);
                if(isempty == 0 || parentHasClass == "true"){  
                     //alert(isempty);                 
                     myLayout.sizePane("west", 100);
                }
                });   

        });     
...