jQuery. Каждый цикл по одному

0

У меня есть каждый цикл, проходящий через определенный класс (.casebox). Он проверяет наличие дополнительных классов и изменяет заголовок и загружает определенный контент через.load().

HTML

<div id="mainbody">
 <div class="halfbox">
                    <h4 class="box casetitle"></h4>
                    <div class="caseloader loader"><img src="<?php echo $url_resources_images; ?>ajax-loader.gif" alt="Loading..." /><br /><p>Please be patient, loading cases...</p></div>
                    <div class="casebox dashbox"></div>
                </div>
                <div class="halfbox">
                    <h4 class="box casetitle"></h4>
                    <div class="caseloader loader"><img src="<?php echo $url_resources_images; ?>ajax-loader.gif" alt="Loading..." /><br /><p>Please be patient, loading cases...</p></div>
                    <div class="casebox dashbox apending"></div>
                </div>

Javascript

function loadCases(){
$(".casebox").each(function(){
    getURLs();
    boxType();
    console.log('activated');
    div = $(this).parents('div').eq(0);
    div.css('background', 'blue');

    //BOXOVERIDE - FOR WHEN THE URL CAN'T BE SET E.G. DASHBOARD
    if($(this).hasClass("allopen")){
        div.find($('.casetitle').text('All Open Cases'));
        caseGET = "&casetype=allopen";
    } else if($(this).hasClass("copen")){
        div.find($('.casetitle').text('My Created Cases (Open)'));
        caseGET = "&casetype=copen";
    } else if($(this).hasClass("aopen")){
        div.find($('.casetitle').text('My Assigned Cases (Open)'));
        caseGET = "&casetype=aopen";
    } else if($(this).hasClass("allclosed")){
        div.find($('.casetitle').text('All Closed Cases'));
        caseGET = "&casetype=allclosed";
    } else if($(this).hasClass("cclosed")){
        div.find($('.casetitle').text('My Created Cases (Closed)'));
        caseGET = "&casetype=cclosed";
    } else if($(this).hasClass("aclosed")){
        div.find($('.casetitle').text('My Assigned Cases (Closed)'));
        caseGET = "&casetype=aclosed";
    } else if($(this).hasClass("apending")){
        div.find($('.casetitle').text('My Assigned Cases (Pending Close)'));
        caseGET = "&casetype=apending";
    }
    console.log(caseGET);
    $(this).load("boxes/cases.php?boxtype=" + boxtype + caseGET + orgGET, function (){
        div.find(".caseloader").hide();
    });
});
}

Тем не менее, кажется, что он проходит быстро, и когда он попадает во второй цикл, он, похоже, переопределяет настройки, сделанные на первом проходе. 1-й прогон не имеет совпадающего результата для.hasClass, а его название задается функцией getURLS(). Однако, когда второй цикл проходит, он переопределяет то, что было установлено в 1-ом ящике, и ставит заголовок как "Мои назначенные случаи (в ожидании закрытия)", хотя это только второй ящик, который имеет этот класс. Кроме того, 1-й ящик загружает правильное содержимое, но панель загрузки не исчезает, но панель загрузки во втором поле исчезает.

Любые идеи о том, как обеспечить его сохранение? Вероятно, это не очень понятно, но, надеюсь, из приведенного выше кода, это поможет с объяснением. Благодарю.

  • 1
    Этот код довольно трудно читать ... Вы рассматривали поиск по словарю? Вы в основном создаете объект со всеми различными случаями и присваиваете функции каждому, а затем просматриваете текущий класс по словарю. Это значительно улучшит читабельность кода и, возможно, его размер. Хотя в этом случае вы, вероятно, можете обойтись только с объектом с классами в качестве ключей и текстом в качестве значений.
  • 0
    что вы подразумеваете под второй петлей? Также сначала, if пытается использовать find на логическое значение.
Показать ещё 4 комментария
Теги:
loops
each

1 ответ

-1
Лучший ответ

Я не знаю, откуда взялись boxType, orgGet... Но я думаю, что проблема заключалась в том, что когда вы объявляли такие вещи, как $ ('. Casetitle'), он фактически повторно просматривал весь документ для этих классов.

попробуйте что-то вроде:

function loadCases(){
    $(".casebox").each(function(){
        getURLs();
        boxType();
        console.log('activated');

        //parent halfbox - only get the first parent
        var parent = $(this).parent('.halfbox');
        parent.css('background', 'blue');

        //seems that you try to get the casetitle all the time
        //find the element with the class casetitle, which is inside the parent
        var ct = parent.find('.casetitle');

        //BOXOVERIDE - FOR WHEN THE URL CAN'T BE SET E.G. DASHBOARD

        if($(this).hasClass("allopen")){
            //change the html inside the h4
            ct.html('All Open Cases');
            caseGET = "&casetype=allopen";
        } else if($(this).hasClass("copen")){
            ct.html('My Created Cases (Open)');
            caseGET = "&casetype=copen";
        } else if($(this).hasClass("aopen")){
            ct.html('My Assigned Cases (Open)');
            caseGET = "&casetype=aopen";
        } else if($(this).hasClass("allclosed")){
            ct.html('All Closed Cases');
            caseGET = "&casetype=allclosed";
        } else if($(this).hasClass("cclosed")){
            ct.html('My Created Cases (Closed)');
            caseGET = "&casetype=cclosed";
        } else if($(this).hasClass("aclosed")){
            ct.html('My Assigned Cases (Closed)');
            caseGET = "&casetype=aclosed";
        } else if($(this).hasClass("apending")){
            ct.html('My Assigned Cases (Pending Close)');
            caseGET = "&casetype=apending";
        }
        console.log(caseGET);

        $(this).load("boxes/cases.php?boxtype=" + boxtype + caseGET + orgGET, function (){
            parent.find('.caseloader').hide();
        });
    });
};
  • 0
    фантастический @Greg Я должен дать вам дополнительные похвалы за выяснение этого кода :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню