Ich habe einen Handler an ein Ereignis angehängt und möchte, dass er nur ausgeführt wird, wenn er von einem Menschen und nicht von einer trigger () -Methode ausgelöst wird. Wie erkenne ich den Unterschied?
Beispielsweise,
$('.checkbox').change(function(e){
if (e.isHuman())
{
alert ('human');
}
});
$('.checkbox').trigger('change'); //doesn't alert
javascript
jquery
Dziamid
quelle
quelle
:)
event.isTrigger
originalEvent
wenn das Ereignis ausgelöst wirdDOM.click()
, aber Sie können verwenden$($("#try")[0]).click();
, was klobig ist, aber funktioniert.Einfacher als oben wäre:
quelle
isTrigger
zur öffentlichen API wechseln möchten .Ich denke, dass der einzige Weg, dies zu tun, darin besteht, einen zusätzlichen Parameter für den
trigger
Aufruf gemäß der Dokumentation zu übergeben .Beispiel: http://jsfiddle.net/wG2KY/
quelle
Akzeptierte Antwort hat bei mir nicht funktioniert. Es ist 6 Jahre her und jQuery hat sich seitdem sehr verändert.
Gibt beispielsweise
event.originalEvent
immertrue
mit jQuery 1.9.x zurück. Ich meine, Objekt existiert immer, aber Inhalt ist anders.Diejenigen, die neuere Versionen von jQuery verwenden, können diese ausprobieren. Funktioniert mit Chrome, Edge, IE, Opera, FF
quelle
Derzeit unterstützen die meisten Browser event.isTrusted :
Aus Dokumenten :
quelle
Sie können onmousedown verwenden, um einen Mausklick gegen einen Trigger () -Aufruf zu erkennen.
quelle
Ich würde über eine Möglichkeit nachdenken, bei der Sie die Mausposition überprüfen, wie:
quelle
Wenn Sie die Kontrolle über Ihren gesamten Code haben, gibt es keine Alien-Anrufe
$(input).focus()
alssetFocus()
.Die Verwendung einer globalen Variablen ist für mich der richtige Weg.
Wenn ein Außerirdischer immer noch
$(input).focus()
von einem anderen Planeten anrufen möchte . Viel Glück oder überprüfen Sie andere Antwortenquelle
setFocus()
- es verhindert nicht, dass Personen das Fokusereignis auslösen. Überhaupt nicht zu schreibensetFocus()
würde auch die Leute daran hindern, es anzurufen, also sehe ich den Vorteil nicht. Tatsächlich könnten die Leute immer noch anrufen$('input').focus()
und es passieren lassen.(function(){/*your code here*/})();
Dies würde verhindern, dass die setFocus-Funktion aufgerufen und der Boolesche Wert von externen Skripten geändert wird.