1

我在网页上有一系列按钮和一个表单。

表单在页面加载时隐藏,我slideToggle用来在按下按钮时显示表单。

html是这样的:

<div id="links">
    <button id="btn_01" class="tog active">Open</button>
    <button id="btn_02" class="tog">Open</button>
    <button id="btn_03" class="tog">Open</button>
</div>

<div id="form">
  <button id="close">Close</button>
  <form>Form contents...</form>
</div>

到目前为止,我拥有的 JS(从一个按钮触发)是:

$("#form").hide();

$("button.tog").bind("click", function(){

    if($("button.active").length) $("button.active").removeClass("active");
    if($("#form").is(":visible") == true) { $("#form).slideUp();

    $(this).addClass('active');
    $("#form").slideToggle();
});

$("buttton#close").click( function {
    $('#form').slideUp();
});

单击任何按钮时,如果#form 打开它应该向上滑动,并且应该从旧按钮中删除活动类并添加到刚刚单击的按钮上。

还应该能够从#form 中单击button#close 来触发slideToggle(并且还可以从#links 按钮中删除活动类。

我对 JQuery 相当陌生,并且在代码顺序方面遇到了麻烦。

当#form 打开并单击原始按钮时,该slideToggle功能关闭,然后重新打开 div。

我已经尝试了很多这种变化,但无法让它正常工作。

任何帮助将非常感激。

干杯,莱昂

JSFiddle 样机:http: //jsfiddle.net/leonharris/9mKTc

4

1 回答 1

0

尝试

$(document).ready(function () {

    var $frm = $('#form').hide();

    var $bts = $("button.tog").on('click', function () {
        var $this = $(this)
        $bts.filter(".active").not(this).removeClass('active');
        $this.toggleClass('active');

        if ($this.hasClass('active') && $frm.is(':visible')) {
            $frm.stop(true, true).slideUp(function () {
                $(this).slideDown()
            });
        } else {
            $frm.stop(true, true).slideToggle();
        }
    });
    $bts.filter('.active').click();

    $("#close").click(function () {
        $bts.filter(".active").removeClass('active');
        $frm.slideUp();
    });
});

演示:小提琴

于 2013-10-05T13:20:33.393 回答