2010-05-27 30 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