2015-03-10 4 views
0

Я знаю, что я должен быть в состоянии сделать это в рамках одной функции. У меня есть 2 кнопки, которые показывают 2 разных формы при нажатии. Когда кто-то переключается, другой скроется. Вот как я это делаю сейчас.Как я могу сделать эту функцию?

$("#newaccount_form").hide(); 
$("#newuser_form").hide(); 

$(function(){ 
$("#newaccount").on("click", function(){ 
    if ($('#newuser_form').is(":visible")) 
    { 
     $("#newuser_form").hide("slow"); 
     $("#newaccount_form").slideToggle("slow"); 
    } 
    else{ 
     $("#newaccount_form").slideToggle("slow"); 
    } 
    }); 
}); 

$(function(){ 
$("#newuser").on("click", function(){ 
    if ($('#newaccount_form').is(":visible")) 
    { 
     $("#newaccount_form").hide("slow"); 
     $("#newuser_form").slideToggle("slow"); 
    } 
    else{ 
     $("#newuser_form").slideToggle("slow"); 
    } 
    }); 
}); 

Как я могу превратить это в одну функцию? Как я могу сделать 2 элемента, попавших в одну и ту же функцию?

+0

вы можете использовать атрибут «данные» для элемента. и используя одно имя класса для обоих элементов, вы можете управлять в событии с одним кликом. путем получения атрибута «данные» при нажатии кнопки вы можете поместить условия, чтобы скрыть формы шоу. –

ответ

2

Может соответствовать ID элемента щелкнул к селекторов форм

var $forms = $("#newaccount_form, #newuser_form").hide(); 

$("#newaccount, #newuser").on("click", function(){ 
    var target_form = $('#' + this.id + '_form').slideToggle(); 
    $forms.not(target_form).slideUp(); // or hide()  
}); 

Это на самом деле не нужно, чтобы проверить :visible в случае использования анимации вместо тумблера.

DEMO

+0

Это работает, однако я не могу скрыть обе формы, если пользователь тоже выбирает. Один из них постоянно отображается. – Zoxac

+0

Может изменить первую анимацию на slideToggle, затем – charlietfl

+0

yep, которая работает идеально, и это намного опрятно, чем то, что я работал. Благодаря! – Zoxac

0

Использование jQuery.data() может решить эту проблему. так,

$("#newaccount").click(function(){ 
    $(this).data('pressed', true);} 
); 

Затем вы можете использовать, если заявление для проверки произвольной величины. Затем вы можете проверить его с помощью оператора if.

0
$("#newaccount_form").hide(); 
$("#newuser_form").hide(); 

$(function(){ 
    $("#newaccount").on("click", show_new_form("#newaccount_form", "#newuser_form")); 
    $("#newuser").on("click", show_new_form("#newuser_form", "#newaccount_form")); 
    function show_new_form(new_form, current_form){ 
     return (function(){ 
      if ($(current_form).is(":visible")) 
      { 
       $(current_form).hide("slow"); 
      } 
      $(new_form).slideToggle("slow"); 
     }); 
    } 
}); 
+0

Это не работает вообще, когда я его использую, мои формы постоянно отображаются, и когда кнопка нажата, ничего не происходит. – Zoxac

+0

Я только что переписал ваш фрагмент кода. когда вы перемещаете строки с помощью hide в функцию $, она работает нормально. –

0

Попробуйте

$("#newaccount_form").hide(); 
$("#newuser_form").hide(); 

$(function(){ 
$("#newaccount,#newuser").on("click", function(){ 
    if ($('#newuser_form').is(":visible")) 
    { 
     $("#newuser_form").hide("slow"); 
     $("#newaccount_form").slideToggle("slow"); 
    } 
    else if ($('#newaccount_form').is(":visible")) 
    { 
     $("#newaccount_form").hide("slow"); 
     $("#newuser_form").slideToggle("slow"); 
    } 
    else 
    { 
     $("#"+$(this).attr("id")+"_form").slideToggle("slow"); 
    } 
    }); 
}); 
2

Допустим, что в скором времени вам нужно будет добавить больше Div, чтобы показать/скрыть. Вы должны использовать класс как селектор и скрыть все div (или любой другой элемент), прежде чем показывать тот, который запускается кнопкой. Если у вас есть что-то вроде этого:

<button class="toggle_btn" id="newaccount" data="newaccount_form">New Account</button> 
<button class="toggle_btn" id="newuser" data="newuser_form">New User</button> 

<div class="toggle red" id="newaccount_form"></div> 
<div class="toggle blue" id="newuser_form"></div> 

Вы можете контролировать его обобщенно:

$(function(){ 
    $("#newaccount_form").hide(); 
    $("#newuser_form").hide(); 

    $(".toggle_btn").click(function() { 
     $(".toggle").hide("slow"); 
     var dataSelectorId = $(this).attr("data"); 
     if ($('#' + dataSelectorId).is(":hidden")) { 
      $("#" + dataSelectorId).slideToggle("slow"); 
     } 
    }); 
}); 

Попробуйте на этом Fiddle

+1

Это работает и для меня, еще одно отличное решение, спасибо вам большое! – Zoxac

+0

Есть ли способ использовать этот метод с выпадающим выбором (при изменении) + кнопками (по щелчку) в качестве «toggle_controller» (вместо toggle_btn)? http://stackoverflow.com/questions/29015716/jquery-show-only-a-single-div-at-a-time – Zoxac

Смежные вопросы