Jquery espera y haz clic más veces

Tengo una pregunta porque no entiendo esto.

Quiero esperar entre mostrar la siguiente pestaña con jquery y codificar algo como esto:

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

Esperaba esperar 2 segundos si se hacía clic en la siguiente pestaña. Pero el tiempo de espera solo comienza una vez y se hace clic en todos los hrefs inmediatamente sin esperar.

Luego probé algo diferente:

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();
}

El tiempo de espera funciona aquí, pero no sé por qué. Aquí solo me queda el problema con el clic inmediato. No está esperando hasta hacer clic en la siguiente pestaña.

¿Alguien puede ayudar?

gracias de antemano


Escribí cosas raras ... lo siento ... este es mi código real y está funcionando casi:

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();
}

Pero solo está haciendo clic en la tercera pestaña (# tabs-2) 3 veces, no en todas las pestañas una vez (1,2,3) como quiero. Para explicarlo: quiero cambiar automáticamente entre pestañas (pestañas de jquery ui) con un intervalo de espera hasta el siguiente clic.

preguntado el 10 de mayo de 11 a las 13:05

¿Podría reformular lo que está tratando de lograr? No es diferente a tu pregunta. Además, debe pasar una función, no una cadena, a setTimeout() y setInterval(). -

Mira mi edición, creo que he descubierto lo que buscas. Necesitas pasar el tablink variable a changeTab, ahora es solo parte de una cadena. Como dije antes, no pases cadenas a setTimeout. -

1 Respuestas

Si entiendo lo que está preguntando ... tiene varias pestañas por las que desea avanzar con un temporizador, sin embargo, su consulta es demasiado ambiciosa.

Lo que querrás hacer es tomar tu colección, invocar a cada uno de ellos con un desplazamiento diferente.

Barato, podrías hacer algo como esto ...

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

Debe recordar que JQuery devuelve una matriz de resultados que coinciden con su consulta Y que los temporizadores no se inicializan secuencialmente. Una declaración de temporizador comienza la cuenta regresiva inmediatamente cuando la define. Simplemente le ha pedido a JQuery que inicie un temporizador para que cada resultado se active al mismo tiempo.

contestado el 10 de mayo de 11 a las 17:05

esto parece ser muy bueno, pero aparece el error 'Error de tipo no detectado: no se puede llamar al método' clic 'de indefinido'. en pestañas tengo este '[ 1 , 1 , 2 ]' - user746916

Cuando accede a un elemento de un objeto jQuery por índice, como tabs[item], recupera el elemento DOM subyacente, no un elemento DOM envuelto en jQuery. Tendrías que hacer $(tabs[item]).click(). - Matt Ball

¿Sabes cómo esto puede ser un bucle sin fin? como repetirlo desde la primera pestaña otra vez ... ¿bucle sin fin? - user746916

function doTabSlide () {$ ('# tabs ul .ui-corner-top'). each (function (i) {setTimeout (function () {$ ('a [href * = "# tabs -' + (i + 1) + '"]'). Click (); if ((i + 1) == $ ('# tabs ul .ui-corner-top'). Size ()) {setTimeout (function () {doTabSlide ( )}, 300);}}, i * 300);}); }; doTabSlide (); - user746916

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.