Jquery Slidetoggle:为什么要重新加载我的页面?

时间:2012-03-07 17:24:26

标签: toggleclass jquery

我遇到两个slideToggles的奇怪问题。 #bannerChoice幻灯片工作得很好,但是#search幻灯片,打开时应该重叠#bannerChoice,从不打开多个中途。相反,它会强制页面重新加载。

这是我的代码:

function bannerChoice()
{
    $('#bannerChoice').slideToggle(function()
    {
        if($('#bannerChoice').is(':visible'))
        {
            $('html').css({overflow:"hidden",height:"100%"});
        }
        else
        {
            $('html').css({overflow:"auto",height:"2171px"});
        }
    });
}

function toggleForm()
{
    $('#search').slideToggle(350);
    return false;
}

<div id="bannerChoice">
    <div id="bcText">Select a banner graphic:<br/></div>
    <div id="bcImages">
        <form action="#" method="post">
            <input type="hidden" name="setBanner" id="setBanner" value="">
            <img src="/media/profile/images/bgs/bg1_thumb.png"
                 onClick="setBanner(1,event);"/>
            <img src="/media/profile/images/bgs/bg2_thumb.png"
                 onClick="setBanner(2,event);"/>
            <img src="/media/profile/images/bgs/bg3_thumb.png"
                 onClick="setBanner(3,event)" />
            <img src="/media/profile/images/bgs/bg4_thumb.png"
                 onClick="setBanner(4,event)" /><br/>
            <span id="bcBttns">
                <input type="submit" value="Submit" class="submit"
                 name="bttnSubmit" /><input type="button" value="Cancel"
                 onClick="bannerChoice()">
            </span>
        </form>
    </div>

    <div id="bcBG">&nbsp;</div>
</div>

<span onClick="toggleForm()">
    <a href="" style="display:inline-block; color:#bbb; padding:0 13px;
        line-height:70px;">link text</a></span>
    <div style="padding-left:13px; z-index:9004">
        <form id="search" method="post" action="#">
        <input type="text" name="name" value="Name" style="width:112px"/><br/>
        <input type="text" name="city" value="City" style="width:112px" /><br/>
        <input type="text" name="state" value="State" style="width:112px" /><br/>
        <input type="text" name="zip" value="Zip" style="width:112px" /><br/>
        <input type="button" class="submit" style="margin:0 13px 0 13px;"
               value="Search">
    </form>
    </div>

3 个答案:

答案 0 :(得分:10)

jQuery不会导致页面刷新。当您点击跨度中的链接时,该页面将转到网址“”,即重新加载当前页面。

您需要在脚本中添加e.preventDefault()以防止链接执行其默认操作(转到链接):

function toggleForm(e)
{
    e.preventDefault();
    $('#search').slideToggle(350);
}

您需要在通话中添加event

onclick='toggleForm(event)'

bannerChoice()不会重新加载页面,因为它位于取消按钮上,该按钮不会作为其默认操作的一部分发布。

正如其他人在这里所说的,内联Javascript并不是一个好主意。它使代码不可读,难以调试,并阻止您轻松重用代码。没有(好的)理由在jQuery中使用内联Javascript。

答案 1 :(得分:1)

我使用

遇到了同样的问题
<a href="#" id="toggle-trigger">Edit</a>  

另一个更简单的选项是,不使用链接“a”标记中的href =或输入提交,以便在页面内进行切换。只需使用:

<a id="toggle-trigger" style="cursor: pointer;">Edit</a>  

或者在你的情况下,一个跨度div的样式看起来像一个按钮。

答案 2 :(得分:0)

Is there an easy way to reload css without reloading the page?

使用无需往返服务器的innerHtml属性。