Jquery подождите и нажмите больше раз - PullRequest
0 голосов
/ 10 мая 2011

У меня вопрос, потому что я этого не понимаю.

Я хочу подождать между отображением следующей вкладки с помощью jquery и кодированием чего-то вроде этого:

$('#tabs ul .ui-corner-top').each(function(){
    setTimeout(function(){},2000)
    $(this).children('a').click();
});

Я ожидал увидеть 2 секунды ожидания, если будет нажата следующая вкладка. Но тайм-аут начинается только один раз, и все hrefs нажимаются немедленно, без ожидания.

Тогда я попробовал что-то другое:

for (i=0;i<$('#tabs ul .ui-corner-top').size();i++) {
    setTimeout('changeTab(i)',i*3000);
}

function changeTab(i) {
    clearTimeout(timeout);
    timeout=setTimeout(function(){
        $('#mainContent').masonry();
    }, 1500);
    tablink='a[href*="#tabs-'+i+'"]';
    $(tablink).click();
}

Время ожидания здесь работает, но я не знаю почему. Здесь у меня осталась только проблема с немедленным нажатием. Он не ждет, пока не перейдет на следующую вкладку.

Может ли кто-нибудь помочь?

заранее спасибо


я полностью написал странные вещи .. извините ... это мой настоящий код и он работает почти:

for (i=0;i<$('#tabs ul .ui-corner-top').size();i++) {
    tablink='a[href*="#tabs-'+i+'"]';
    setTimeout('changeTab(tablink)',i*3000);
}

function changeTab(tablink) {
    $(tablink).click();
}

Но он только 3 раза щелкает по третьей вкладке (# tabs-2), а не по каждой вкладке один раз (1,2,3), как я хочу. Для объяснения: я хочу автоматически переключаться между вкладками (вкладками jquery ui) с интервалом ожидания до следующего нажатия.

1 Ответ

0 голосов
/ 10 мая 2011

Если я понимаю, о чем вы спрашиваете ... у вас есть несколько вкладок, по которым вы хотите перейти по таймеру, однако ваш запрос слишком жадный.

То, что вы захотите сделать, это взять свою коллекцию, вызывать каждую из них с различным смещением.

Дешево, ты мог бы сделать что-то вроде этого ...

    var tabs = $(this).children('a');
    var numberOfTabs = tabs.length;
    for (var item = 0; item < numberOfTabs; item++)
    {
        window.setTimeout(function(){tabs[item].click();},2000*item);
    }

Вы должны помнить, что JQuery возвращает массив результатов, соответствующих вашему запросу, И что таймеры не инициализируются последовательно. Объявление таймера начинает обратный отсчет сразу после его определения. Вы просто попросили JQuery запустить таймер для каждого результата, который должен быть активирован одновременно.

...