Angenommen, ich habe einen Klick-Handler definiert:
$("#foo").click(function(e){
});
Wie kann ich im Funktionshandler feststellen, ob das Ereignis programmgesteuert oder vom Benutzer ausgelöst wurde?
$x.click()oder $x.trigger('click').
Angenommen, ich habe einen Klick-Handler definiert:
$("#foo").click(function(e){
});
Wie kann ich im Funktionshandler feststellen, ob das Ereignis programmgesteuert oder vom Benutzer ausgelöst wurde?
$x.click()oder $x.trigger('click').
Antworten:
Sie können sich das Ereignisobjekt ansehen e. Wenn das Ereignis von einem echten Klick ausgelöst wurde, haben Sie Dinge wie clientX, clientY, pageX, pageY, etc. im Inneren eund sie werden Zahlen sein; Diese Zahlen beziehen sich auf die Mausposition, wenn der Klick ausgelöst wird, sind jedoch wahrscheinlich auch dann vorhanden, wenn der Klick über die Tastatur ausgelöst wurde. Wenn das Ereignis von ausgelöst wurde, haben $x.click()Sie nicht die üblichen Positionswerte in e. Sie könnten auch an der aussehen originalEventEigenschaft , die nicht da sein sollte , wenn das Ereignis herkommt $x.click().
Vielleicht so etwas:
$("#foo").click(function(e){
if(e.hasOwnProperty('originalEvent'))
// Probably a real click.
else
// Probably a fake click.
});
Und hier ist eine kleine Sandbox zum Spielen: http://jsfiddle.net/UtzND/
originalEvent? Ist es das Richtige? Gibt es irgendwo Koordinaten? Sind die Koordinaten konsistent? Sind die Koordinaten drin #foo? ...
Sie können einen zusätzlichen Parameter verwenden, wie im Handbuch zum jQuery-Trigger angegeben :
$("#foo").click(function(e, from){
if (from == null)
from = 'User';
// rest of your code
});
$('#foo').trigger('click', ['Trigger']);
$x.click()der .click()Anrufer Ihnen explizit mitteilen muss, dass er es vortäuscht. Dies kann ein Problem sein oder auch nicht, je nachdem, was Kevin Owocki vorhat.
$x.click()EventHandler (für Benutzer-Klick, der "normal" sein kann) nicht ganz
Es ist bereits eine andere Frage beantwortet.
Wie erkenne ich, ob ein Klick () ein Mausklick ist oder durch einen Code ausgelöst wird?
Verwenden Sie die whichEigenschaft des Ereignisobjekts. Es sollte undefinedfür Code-ausgelöste Ereignisse sein
$("#someElem").click(function(e) {
if (e.which) {
// Actually clicked
} else {
// Triggered by code
}
});
JsFiddle-Beispiel - http://jsfiddle.net/interdream/frw8j/
Ich hoffe es hilft!
selectwürde ein e.which==undefinedAusgleich für ein echtes Ereignis geben.
Ich habe alle oben genannten Lösungen ausprobiert. In meinem Fall wurde nichts funktioniert. Die folgende Lösung hat bei mir funktioniert. Hoffe es wird dir auch helfen.
$(document).ready(function(){
//calling click event programmatically
$("#chk1").trigger("click");
});
$(document).on('click','input[type=checkbox]',function(e) {
if(e.originalEvent.isTrusted==true){
alert("human click");
}
else{
alert("programmatically click");
}
});
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js">
</script>
<input type="checkbox" id="chk1" name="chk1" >Chk1</input>
<input type="checkbox" id="chk2" name="chk2" >Chk2</input>
<input type="checkbox" id="chk3" name="chk3" >Chk3</input>
DOM Level 3 gibt event.isTrusted an. Dies wird derzeit nur in IE9 + und Firefox unterstützt (basierend auf meinen Tests. Ich habe auch gelesen (obwohl nicht gründlich recherchiert), dass es in einigen Browsern überschrieben werden kann und wahrscheinlich noch nicht zu 100% bereit ist, tatsächlich vertrauenswürdig zu sein (leider).
Dies ist eine modifizierte Version von @ mus Geige, die unter IE und Firefox funktioniert.
isTrustedeinmischen, um festzustellen, ob sie unterstützt und nicht beschreibbar sind. Ich denke, die wirkliche Antwort hängt vom Warum hinter dieser Frage ab, und wir haben nie herausgefunden, warum.
Nicht gehen in der intellektuellen Diskussion teilzunehmen, den Code, der für mich Filter gearbeitet .click()und .trigger('click')is-
$(document).on('click touchstart', '#my_target', function(e) {
if (e.pageX && e.pageY) { // To check if it is not triggered by .click() or .trigger('click')
//Then code goes here
}
});