2010-05-27 56 views
5

使用的toogle显示/隐藏在div,我有一个问题,当我躲在我的anothor函数div,我有按钮上单击两次执行正确的操作。如何更改jQuery的切换()的状态

有什么办法改变拨动开关就像我点击按钮?

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

回答

1

你可以改变你.toggle()所以没关系,就像这样:

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

这确实一个slideToggle()代替,所以目前的状态并不重要......当它完成滑动,如果显示(你打开它),你会在输入中得到一个1,否则你得到一个0。此外,使用.val()进行输入设置,更容易和更普遍(我假设这是一个输入,因为这很可能)。

1

不行,你就必须实现自己的替代切换()函数,它检查元素的当前状态。

0

我看不出有任何需要使用toogle在所有。你可以做同样的,只需单击处理:

$('#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"); 
    } 
}); 

然后:

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

顺便说一句。 nav不是HTML元素。你可能的意思是#nav(也许只是一个错字)。

而尼克已经提到,考虑使用.val()

+0

导航 - 在HTML5 – 2010-05-27 14:57:26

+0

新标签BTW您的解决方案上下滑动,在一个周期内,所以它挥舞着:) – 2010-05-27 15:01:16

0

我建议一个事件驱动的计算策略,如:

$("#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

这是不一样的OP有,点击'#nav'总是*关闭*元素,你的解决方案导致我切换它。您需要一个'.trigger(“close”)',但这似乎是一个非常复杂的方式,不利用已定义的函数...... – 2010-05-27 12:30:12