jQuery .click() wird ausgelöst, wenn Text ausgewählt/hervorgehoben wird

Lesezeit: 2 Minuten

Ich habe ein <div> mit einer Menge Text darin. Dies <div> hat auch eine .click() Event darauf mit jQuery.

Das Problem, das ich habe, ist, dass die .click() wird beim Auswählen/Hervorheben von Text ausgelöst. Halten Sie die Maustaste sogar einige Sekunden lang gedrückt, bevor Sie sie loslassen.

Hier ist ein JSFiddle, das das Problem zeigt: http://jsfiddle.net/ym5JX/

Das Verhalten, das ich erwarten würde, ist, dass das Hervorheben von Text nicht dasselbe ist wie das Klicken auf das Element.

  • Das liegt daran, dass a click ist ein mousedown gefolgt von einem mouseup.

    – generisch

    30. April 2012 um 20:19 Uhr

  • mousedown + mouseup = click. Das Hervorheben tut es, also löst es einen Klick aus.

    – Selvakumar Arumugam

    30. April 2012 um 20:19 Uhr


  • Was ist deine Frage? Möchten Sie das Klicken stoppen? Klick nur zulassen, wenn kein Text ausgewählt ist?

    – Rory McCrossan

    30. April 2012 um 20:22 Uhr

  • Nicht in meinem Fall (Oper). Und übrigens, sollte nicht mousedown + mouseup = click nur halten, wenn es eine kleine (vom System definierbare) Zeitverzögerung zwischen den Ereignissen gibt?

    – Kobold

    30. April 2012 um 20:22 Uhr

  • Gibt es also irgendeine Art von Arbeit in der Nähe?

    – krische

    30. April 2012 um 20:23 Uhr

Das liegt daran, dass a click ist ein mousedown gefolgt von einem mouseup. Mein Vorschlag ist zu überprüfen getSelection innerhalb der click Handler. Wenn es gesetzt ist, dann haben Sie etwas ausgewählt, sonst haben Sie nur geklickt.

$('#click').click(function() {
    var sel = getSelection().toString();
    if(!sel){
        alert("clicked");
    }
});​

DEMO: http://jsfiddle.net/ym5JX/3/

  • Wahrscheinlich möchte ich die Länge überprüfen haveSel = getSelection().toString().length > 0

    – Brad Kent

    23. April 2015 um 15:55 Uhr

  • Um nicht die ganze App zu beschädigen, wenn ein Benutzer an anderer Stelle Text ausgewählt hat, kann es gut sein, zu überprüfen, ob sich der ausgewählte Text im relevanten Element befindet: if(!e.target.contains(getSelection().anchorNode)).

    – Andreas Hultgren

    22. März 2016 um 16:20 Uhr

  • Eine Überprüfung der Auswahl an anderer Stelle scheint nicht erforderlich zu sein. Der Grund dafür ist, dass ein “echter” Klick jede Auswahl an anderer Stelle auf der Seite aufhebt.

    – Nekreaux

    2. November 2018 um 17:19 Uhr

Wie ich auf Kommentar gepostet habe, mosuedown + mouseup = click Das ist genau das, was Hervorhebung tut. Dafür gibt es eine Problemumgehung. Siehe unten.

var isClick = 0;
$('#click').click(function() {
    if (isClick == 1) {
        alert("clicked");
    }
}).mousedown(function () {
    isClick = 1;
}).mousemove(function () {
    isClick = 0;
});

DEMO

  • Überprüfen, ob sich die Maus zwischen bewegt hat mousedown und mouseupschlau 😛

    – generisch

    30. April 2012 um 20:25 Uhr


jsFiddle: http://jsfiddle.net/ym5JX/8/

$('#click').click( function()
{
    if ( getSelection() == "" )
    {
        alert("clicked");
    }
});

1228370cookie-checkjQuery .click() wird ausgelöst, wenn Text ausgewählt/hervorgehoben wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy