0

我正在使用此代码在(button_panel)按钮单击时从右侧滑动我的 div,一切正常,但是当我单击 div 面板内的任何按钮时,面板会回到其原始位置。它不应该发生,因为单击事件仅用于 button_panel。知道为什么吗?

var sipPos = 0;
$(document).ready(function () {
    $("#button_panel").click(function (e) {
        e.preventDefault();
        $("#panel").animate({ right: sipPos }, 300, 'linear', function () {
            if (sipPos == 0) { sipPos = -150; }
            else { sipPos = 0; }
        });
    });
});

<div id="panel" style=" border-style: solid; border-color: #008000; background-color:#D5FFD5; width:150px; height:400px; right:-150px; top:142px; position:absolute" align="center" >
    <asp:ImageButton ID="button_panel" runat="server"  style=" background-image: url('images/ProgressBar1.jpg'); width:80px; height:30px; left:-83px;  margin-top:-12px; position:absolute; top:0px" Font-Bold="True" ImageUrl="~/images/green_left_arrow_104.jpg" />
    <asp:Label ID="Label6" runat="server" style="margin-top:5px"  Text="Timer" /><br />
    <asp:Button ID="Button1" runat="server" style="margin-top:5px" Text="AFK!" /><br />
    <asp:Button ID="Button2" runat="server" style="margin-top:5px" Text="REVIEW" /><br />
</div>
4

1 回答 1

0

您的按钮会触发对其所有父元素(包括面板)的单击。换句话说,事件在 DOM 树中冒泡。

您需要e.stopPropagation()在处理程序中为您的按钮做:

$(document).ready(function () {
    $("#button_panel").click(function (e) {
        e.preventDefault();

        $("#panel").animate({ right: sipPos }, 300, 'linear', function () {
            if (sipPos == 0) { sipPos = -150; }
            else { sipPos = 0; }
        });
    });

    $("#button_panel button").click(function (e) {
        e.stopPropagation();  // ADD THIS
    });
});

假设是你实际上有button元素。否则,a如果您使用链接,请输入。或者,如果您两者都有:

$("#button_panel button,a").click(function (e) {
    e.stopPropagation();
});

演示:http: //jsfiddle.net/jtbowden/RDKn6/

于 2012-04-09T23:03:20.320 回答