1

我对两个 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>
4

3 回答 3

11

jQuery 不会导致您的页面刷新。当您单击跨度中的链接时,页面将转到 url "",即重新加载当前页面。

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

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

您需要添加event到您的通话中:

onclick='toggleForm(event)'

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

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

于 2012-03-07T17:34:09.060 回答
1

我有同样的问题使用

<a href="#" id="toggle-trigger">Edit</a>  

另一个更简单的选择是不要在链接“a”标签或您的输入提交中使用 href= 来实现页面内的切换。只需使用类似的东西:

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

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

于 2014-03-07T14:55:32.103 回答
0

有没有一种简单的方法可以在不重新加载页面的情况下重新加载 css?

使用无需往返服务器即可工作的 innerHtml 属性。

于 2012-03-07T17:30:21.773 回答