Jak wstrzymać wykonanie kodu do momentu, aż dialog będzie gotowy?

0

Dokladnie tak jak w temacie.

function renderNewMultiselect(pathName) {
    var multiselect = $('.ui-multiselect-menu:not(.ui-multiselect-single)');
    var multiselectHeader = multiselect.find('.ui-widget-header');
    var resetWidgetsContainer = multiselectHeader.find('.ui-helper-reset');
    var widgets = resetWidgetsContainer.find('li:not(.ui-multiselect-close)');

    var checkboxesContainer = multiselect.find('.ui-multiselect-checkboxes');
    var selectAllHTML = "<li class='select_all'><span>Zaznacz wszystkie</span></li>";
    var selectAll = checkboxesContainer.find('li.select_all');

    if (document.location.pathname === pathName) {

        widgets.remove();

        checkboxesContainer.prepend(selectAllHTML);
        selectAll.toggle(function() {
            checkboxesContainer.find('input:checkbox').attr('checked', 'checked');
            $(this).find('span').html('Usuń zaznaczenie')
        }, function() {
            checkboxesContainer.find('input:checkbox').removeAttr('checked');
            $(this).find('span').html('Zaznacz wszystkie')
        });
    }
}

Mam cos takiego, wszystko dziala gdy dialog jest otwarty, ale nie moge sobie poradzic z tym, zeby zbindowac to na zasadzie nie wiem load?
Probowalem .delegate() i innych tego typu rzeczy z mizernym skutkiem. Chodzi dokladnie o ustawienie togg'a.

0

po otwarciu dialogu robisz reinicjalizację na elementach, które jeszcze tego nie doświadczyły

0
function elementExist(func) {
    var check = function() {
        $element = $('div.dialog_main_content')
        if ($element.length) {
            func();
        } else {
            setTimeout(check, 100);
        }
    }
    check();
}

function renderNewMultiselect(pathName) {
    var init = function() {
        var multiselect = $('.ui-multiselect-menu:not(.ui-multiselect-single)');
        var multiselectHeader = multiselect.find('.ui-widget-header');
        var resetWidgetsContainer = multiselectHeader.find('.ui-helper-reset');
        var widgets = resetWidgetsContainer.find('li:not(.ui-multiselect-close)');

        var checkboxesContainer = multiselect.find('.ui-multiselect-checkboxes');
        var selectAllHTML = "<li class='select_all' data-checked='false'><span>Zaznacz wszystkie</span></li>";
        var selectAll;

        if (document.location.pathname === pathName) {

            widgets.remove();
            alert(1);
            console.log(multiselect);
            checkboxesContainer.prepend(selectAllHTML);

            selectAll = checkboxesContainer.find('li.select_all');

            selectAll.toggle(function(){
                checkboxesContainer.find('input:checkbox').attr('checked','checked');
                $(this).attr('data-checked', true);
                $(this).find('span').html('Usuń zaznaczenie')
            },function(){
                checkboxesContainer.find('input:checkbox').removeAttr('checked');
                $(this).attr('data-checked', false);
                $(this).find('span').html('Zaznacz wszystkie')
            });
        }
    }

    return init;
}

$('#content').on('click', '.edit_settings', function() {
        var render = renderNewMultiselect('/');
        elementExist(render);
    });

Zrobiłem to tak.

1
function zrobCostamZMultiselectamiNaStronie() {
  // pobierz multiselekty i zrób z nimi co chcesz, oznacz je jakoś (np. dodając klasę)
  // pobierając je wyżej dopisz do selektora, by wybrać tylko te, które nie mają klasy
}

$(document).ready(function(){
  zrobCostamZMultiselectamiNaStronie();

  $('.otworz_dialog').click(function(){
    // wczytaj treść
    // otwórz dialog
    zrobCostamZMultiselectamiNaStronie();
  });
});

1 użytkowników online, w tym zalogowanych: 0, gości: 1