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 に答える