Javascript mit jQuery: Klicken Sie und doppelklicken Sie auf dasselbe Element, unterschiedliche Wirkung, eine deaktiviert die andere
Habe ich eine interessante situation - ich habe eine Zeile in der Tabelle, die zur Zeit, zeigt, dass es versteckte Gegenstück, wenn ich auf die "Erweitern" Taste. Das original (sichtbaren) Zeile, die enthält die Schaltfläche "erweitern" hat auch einige Inhalte in einer bestimmten Zelle, die, wenn Sie angeklickt wird, wird editierbar. Ich möchte Los zu sein, die Schaltfläche erweitern und aktivieren Sie den ausbau der Zeile per Doppelklick irgendwo in der Zeile selbst, einschließlich Feld, dreht bearbeitet werden, wenn Sie darauf klicken. Können Sie riechen die Mühe hier schon.
Wenn ich doppelt auf eine Zeile, zwei click-Ereignisse ausgelöst werden, bevor das dblclick tritt. Dies bedeutet, wenn ich doppelt auf das Feld klicken, es wird in eine editierbare ein, und die Zeile zu erweitern. Ich möchte, dies zu verhindern. Ich will das doubleclick-um zu verhindern, dass die Entlassung des einzigen Klick, und das mit nur einem Mausklick führen Sie wie gewohnt.
Über das Ereignis.stopPropagation() klar wird nicht funktionieren, da Sie von zwei verschiedenen Ereignissen.
Irgendwelche Ideen?
Bearbeiten (einige halb-pseudo-code):
Original version:
<table>
<tbody>
<tr>
<td><a href="javascript:$('#row_to_expand').toggle();" title="Expand the hidden row">Expand Row</a></td>
<td>Some kind of random data</td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[0]->value("First editable value") ?></td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[1]->value("Second editable value") ?></td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[2]->value("Third editable value") ?></td>
<!-- ... -->
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[n]->value("Nth editable value") ?></td>
</tr>
<tr style="display: none" id="row_to_expand">
<td colspan="n">Some hidden data</td>
</tr>
</tbody>
</table>
Gewünschte version:
<table>
<tbody>
<tr ondblclick="$('#row_to_expand').toggle()">
<td>Some kind of random data</td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[0]->value("First editable value") ?></td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[1]->value("Second editable value") ?></td>
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[2]->value("Third editable value") ?></td>
<!-- ... -->
<td><?= $editable_cell_which_turns_into_an_input_field_on_single_click[n]->value("Nth editable value") ?></td>
</tr>
<tr style="display: none" id="row_to_expand">
<td colspan="n">Some hidden data</td>
</tr>
</tbody>
</table>
Cheers
InformationsquelleAutor der Frage Swader | 2011-03-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Allgemeine Idee:
Auf die erste klicken Sie, bitte rufen Sie die zugehörige Funktion (sagen single_click_function()). Vielmehr stellen Sie einen timer für eine bestimmte Zeit(sagen wir x). Wenn wir nicht bekommen, ein weiterer Klick während dieser Zeitspanne gehen die single_click_function(). Wenn wir das tun bekommen, rufen Sie double_click_function()
Timer werden gelöscht, sobald der zweite Klick erhalten. Es wird auch ausgeglichen werden, wenn x Millisekunden hinfällig.
BTW, check Paolo ' s Antwort aus: Muss stornieren, klicken Sie auf/mouseup-Ereignisse, wenn ein Doppelklick-Ereignis erkannt
und natürlich den gesamten thread! 🙂
InformationsquelleAutor der Antwort UltraInstinct
Arbeiten demo
offensichtlich verwenden
<td class="dblclickable">
InformationsquelleAutor der Antwort Popnoodles
Das Problem tritt nur auf, wenn das Eingabefeld angeklickt wird, so befestigen Sie ein regelmäßiger
click
handler an das element, die Abbrechen Vermehrung der Veranstaltung (siehestopPropagation
) und ein timeout (setTimeout(...)
) für, sagen wir, 600ms (Standard-Zeit zwischen zwei Klicks, um als ein dbl-click ist 500ms [src]). Wenn zu diesem Zeitpunkt diedblclick
hat nicht stattgefunden (Sie können eine var zugänglich in beide event-Handler, die fungiert als ein flag, um dies zu erkennen), dann kannst du davon ausgehen, das der Benutzer wünscht, zu erweitern, der Reihe statt, und fahren Sie mit dieser Aktion...IMO, sollten Sie überdenken dies. Ach, einen einzigen click-handler kann nicht wissen, ob der Benutzer über Doppelklick.
Ich schlage vor, beide Maßnahmen einzigen Klick, und weiß einfach nicht weitergegeben werden aus dem bearbeitbaren Feld, wenn es angeklickt wird.
InformationsquelleAutor der Antwort James
Umschreiben user822711 Antwort für die Wiederverwendung:
Aufruf der Funktion.
InformationsquelleAutor der Antwort puttyshell
Schrieb ich eine einfache jQuery-plugin, dass ermöglicht es Ihnen, eine benutzerdefinierte "singleclick" - Veranstaltung zu unterscheiden zwischen einer Einzel-auf Doppel-klicken. Dies ermöglicht Ihnen die Erstellung einer Schnittstelle, wo eine ein-Klick-macht die Eingabe editierbar, während eine Doppel-klicken Sie auf erweitert. Ähnlich wie der Windows/OSX-Dateisystem umbenennen/open UI.
https://github.com/omriyariv/jquery-singleclick
InformationsquelleAutor der Antwort omriyariv
InformationsquelleAutor der Antwort Philippe Perret
Hinzufügen Antwort von @puttyshell, dieser code ist Platz für ein
visualSingleClick
Funktion. Diese laufen vorsetTimeout
und ist beabsichtigt, um Benutzer einige visual-Aktion für die Aktion, die vor dem timeout, und ich kann einen größeren timeout. Ich bin mit dieser auf einer Google Drive-browsing-Schnittstelle, um zu zeigen Benutzer, der die Datei oder den Ordner, klickte er ausgewählt ist. Google Drive selbst hat etwas ähnliches, aber nicht sah es code.InformationsquelleAutor der Antwort chronossc
In diesem Beispiel in vanilla javascript funktionieren sollte:
InformationsquelleAutor der Antwort Ismayil Niftaliyev
Gibt es eine elegantere Art und Weise dem Umgang mit diesem Problem, wenn Sie mit backbonejs:
InformationsquelleAutor der Antwort Adam Malchi