2010-05-27 10 views
5

Usando toogle para mostrar/ocultar el div, tengo un problema que cuando me escondo mi div con anothor función, tengo que hacer doble clic en el botón para realizar la acción correcta.Cómo cambiar de palanca jQuery() Estado

¿Hay alguna manera cambiar el interruptor de palanca, como he hecho clic en el botón?

$('#add_task').toggle(function() { 
    if ($("#new_task_status").attr("value")==0) { 
     $("#new_task").slideDown(); 
     $("#new_task_status").attr("value", "1"); 
    } 
}, function() { 
    if ($("#new_task_status").attr("value")==1) { 
     $("#new_task").slideUp(); 
     $("#new_task_status").attr("value", "0"); 
    } 
}); 


$('nav').click(function() { 
    if ($("#new_task_status").attr("value")==1) { 
     $("#new_task_status").attr("value", "0"); 
     $("#new_task").slideUp(); 
    } 
}); 

Respuesta

1

Se podría cambiar su .toggle() por lo que no importa, así:

$('#add_task').click(function() { 
    $("#new_task").slideToggle(function() { 
    $("#new_task_status").val($(this).is(':visible') ? 1 : 0); 
    }); 
}); 

Esto hace un slideToggle() lugar, por lo que el estado actual no tiene importancia ... cuando termina deslizante , si se muestra (lo abriste) obtienes un 1 en la entrada, de lo contrario obtienes un 0. Además, use .val() para la configuración de entrada, mucho más fácil y más universal (supongo que es una entrada aquí ya que es más probable).

1

No, tendría que poner en práctica su propia alternativa a la función de palanca(), que comprueba el estado actual del elemento.

0

no veo ninguna necesidad de utilizar toogle en absoluto. Puede hacer lo mismo con sólo un controlador de clic:

$('#add_task').click(function() { 
    if ($("#new_task_status").attr("value")==0) { 
     $("#new_task").slideDown(); 
     $("#new_task_status").attr("value", "1"); 
    } else { 
     $("#new_task").slideUp(); 
     $("#new_task_status").attr("value", "0"); 
    } 
}); 

y luego:

$('nav').click(function() { 
    $('#add_task').click(); 
}); 

BTW. nav no es un elemento HTML. Probablemente se refiera a #nav (tal vez solo un error tipográfico).

Y como Nick ya se ha mencionado, considere utilizar .val().

+0

NAV - nueva etiqueta en HTML5 –

+0

BTW su solución se desliza arriba y abajo en un ciclo por lo que está agitando :) –

0

que sugieren una approch orientada a eventos, como:

$("#add_task").bind({ 
    "toggle": function(e) { 
    $("#add_task").trigger(($("#new_task_status").attr("value")==0) ? "open" : "close");); 
}, 
"open": function(e) { 
    $("#new_task_status").attr("value", "1"); 
    $("#new_task").slideDown(); 
}, 
"close": function(e) { 
    $("#new_task_status").attr("value", "0"); 
    $("#new_task").slideUp(); 
}    
}); 

$("#nav").click(function() { 
    $("#add_task").trigger("toggle"); 
}); 
+0

Esto no es lo mismo que el OP tiene, al hacer clic en '# nav' siempre * cierra * el elemento, tu solución hace que yo lo alterne. En su lugar, necesitaría un '.trigger (" cerrar ")', pero esto parece una forma muy complicada de no aprovechar las funciones ya definidas ... –

Cuestiones relacionadas