2012-04-09 3 views
0

Ich benutze diesen code um meine div von rechts auf (button_panel) button click, alles funktioniert gut, aber wenn ich auf eine taste innerhalb div panel geht das panel zurück zu seine ursprüngliche Position. Es sollte nicht passieren, da das click -Ereignis nur für button_panel verwendet wird. Irgendeine Idee warum?Schiebe div panel geht zurück auf klick buttons in div 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> 
+0

Können Sie sich einen Ausschnitt des HTML schreiben zu bitte? – JonVD

Antwort

0

Ihre Schaltflächen klicken auf alle übergeordneten Elemente, einschließlich der Anzeige, mit einem Klick. Mit anderen Worten, Ereignisse sprudeln durch den DOM-Baum.

Sie benötigen für Ihre Buttons e.stopPropagation() in einem Handler zu tun:

$(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 
    }); 
}); 

Die Annahme ist, dass Sie button Elemente tatsächlich haben. Andernfalls setzen Sie a, wenn Sie Links verwenden. Oder wenn Sie beides:

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

Demo: http://jsfiddle.net/jtbowden/RDKn6/

+0

Ich habe es versucht, es funktioniert nicht. Ich denke, es hat etwas mit Postback zu tun. Was glaubst du ? –

+0

Entschuldigung, mein ursprünglicher Code war falsch. Ich hatte es rückwärts in meinem Kopf. Haben Sie den Code in meiner letzten Bearbeitung getestet, indem Sie Ihren Schaltflächen einen eigenen Handler hinzugefügt haben? Siehe meinen Democode. Es würde auch helfen, Ihr HTML zu sehen. –

+0

Ich spreche über die anderen Tasten in der Div-Panel, die ich gesetzt habe, wenn ich auf sie klicke, geht das Panel zurück. Ich habe versucht, beim Klicken mit diesen Tasten false zurückgeben und es funktioniert, aber es wird dann nicht die Klick-Funktion ausführen. Sagen wir, wenn ich Exit-Button in das Panel setzen will und wenn ich Return false auf Click Event gebe, dann führt der Button keine Funktion aus. –

Verwandte Themen