У меня есть таблица с несколькими строками в каждой строке, это список выбора, и в зависимости от выбора (когда запускается событие onchange) появляются панели, содержащие дополнительные данные под строкой. В настоящее время у меня есть код, подобный этому:
var allPnls = '.inv-dtl-comnts-add,.inv-dtl-comnts-update';
$(document).ready(function(){
hideAll();
//select action change
$(".inv-dtl-ddlaction").change(onSelectChange);
$(".btn-cancel").click(function(event){
slideAll();
$(".inv-dtl-ddlaction").val('[Select an Action]');
return false;
});
});
function onSelectChange(event){
//find out which select item was clicked
switch($(this).val())
{
case 'View/Add Comment':
$(this).closest(".row").children(allPnls).slideUp("fast",
function(){
$(this).closest(".row").children(".inv-dtl-comnts-add").slideToggle("fast");
});
break;
case 'Change Status':
$(this).closest(".row").children(allPnls).slideUp("fast",
function(){
$(this).closest(".row").children(".inv-dtl-comnts-update").slideToggle("fast");
});
break;
default:
//code to be executed if n is different from case 1 and 2
}
}
function hideAll(){
$(allPnls).hide();
}
function slideAll(){
$(allPnls).slideUp("fast");
}
Таким образом, я скрываю все панели, когда страница загружается, и если панель уже открыта, я хочу закрыть ее перед открытием новой панели. Это работает с обратной передачей. С одной панелью в выборке она работала отлично, но с двумя панелями скольжение происходит дважды (кажется, что скользит вниз по неоткрытым панелям, прежде чем снова сдвинуть их вверх). Как я могу настроить это так, чтобы все панели, перечисленные в переменной allPnls, могли закрываться ТОЛЬКО, если они уже открыты? Есть ли лучший способ закрыть панели, а затем сделать обратный вызов для работы slideToggle?
Lloyd