Ähnlich wie this question, aber einen Schritt weiter. Ich mag Klicks außerhalb eines Satzes von Gegenständen erkennen, die ich in der folgenden Art und Weise am Umgang:Erkundige Klick-Element?
$('#menu div').live('click', function() {
// Close other open menu items, if any.
// Toggle the clicked menu item.
$('body').one('click', function(event) {
// Hide the menu item.
event.stopPropagation();
});
});
Dies wirkt wie ein Zauber, leider, wenn ein anderer Menüpunkt geöffnet und ein zweiten geklickt wird, es erfordert zwei Klicks, um den zweiten Gegenstand zu öffnen. Der erste Klick verbirgt den ersten geöffneten Menüpunkt, der zweite zeigt das zweite Menü item.
Die „richtige“ Verhalten funktioniert auf folgende Weise:
- Durch Klicken auf ein Menüpunkt öffnet.
- Wenn Sie auf denselben Menüpunkt klicken (oder auf die untergeordneten Elemente), wird er geschlossen.
- Anklicken eines anderen Menüpunktes schließt den ersten, öffnet den zweiten.
- Wenn Sie von (geöffneten) Menüelementen wegklicken, werden sie geschlossen.
Ich habe folgend anstelle des oben $('body').one()
ausprobiert, um Klicks auf Menüpunkte mit wenig Erfolg zu ignorieren:
// Captures click on menu items in spite of the not.
$('*').not('#menu *').one('click', function() { // Hide menu }
$('*:not(#menu)').one('click', function() { // Hide menu }
Wie immer, vielen Dank für jede Hilfe!
Was ist der Zweck des 'bewegten Handler außerhalb des Menüs klicken Handler body' klicken? Es scheint die gleiche Aufgabe zu erfüllen (ohne den Overhead, jeden Körperklick zu erfassen, wenn das Menü nie geöffnet wird), indem es angewendet wird, nachdem ein Menüelement geöffnet wurde. Oder fehlt mir etwas? – chuckg
Es ist ein fairer Punkt; Ich betrachte den Overhead des Bindens und Aufhebens eines Ereignisses, wenn ein Benutzer auf einen Menüeintrag unnötig klickt. Normalerweise wird nicht viel auf eine Seite geklickt, abgesehen von einer anderen Seite. In diesem Fall ist der zusätzliche Klick-Handler völlig irrelevant. Am Ende des Tages sind beide in Ordnung, abhängig von Ihren Bedürfnissen, so dass Sie sich an den einen Handler halten können, wenn er Ihren Bedürfnissen entspricht. –
e.target funktioniert nicht mit IE ... –