Mam moduł obsługi dołączony do zdarzenia i chciałbym, aby był wykonywany tylko wtedy, gdy jest wyzwalany przez człowieka, a nie przez metodę trigger (). Jak odróżnić różnicę?
Na przykład,
$('.checkbox').change(function(e){
if (e.isHuman())
{
alert ('human');
}
});
$('.checkbox').trigger('change'); //doesn't alert
javascript
jquery
Dziamid
źródło
źródło
:)
event.isTrigger
originalEvent
gdy zdarzenie jest wyzwalane przezDOM.click()
, ale możesz użyć$($("#try")[0]).click();
, co jest niezgrabne, ale działa.Bardziej proste niż powyżej byłoby:
źródło
isTrigger
do publicznego interfejsu API .Myślę, że jedynym sposobem na to byłoby przekazanie dodatkowego parametru w
trigger
wywołaniu zgodnie z dokumentacją .Przykład: http://jsfiddle.net/wG2KY/
źródło
Zaakceptowana odpowiedź nie działa dla mnie. Minęło 6 lat i od tego czasu jQuery bardzo się zmienił.
Na przykład
event.originalEvent
zawsze zwracatrue
z jQuery 1.9.x. Mam na myśli, że przedmiot zawsze istnieje, ale treść jest inna.Ci, którzy używają nowszych wersji jQuery, mogą wypróbować tę. Działa na Chrome, Edge, IE, Opera, FF
źródło
Obecnie większość przeglądarek obsługuje event.isTrusted :
Z dokumentów :
źródło
Możesz użyć onmousedown, aby wykryć kliknięcie myszą w porównaniu z wywołaniem trigger ().
źródło
Pomyślałbym o możliwości, w której sprawdzasz pozycję myszy, na przykład:
źródło
O ile masz kontrolę nad całym swoim kodem, nie ma połączeń obcych
$(input).focus()
niżsetFocus()
.Użycie zmiennej globalnej jest dla mnie poprawnym sposobem.
Jeśli jakiś kosmita nadal chce zadzwonić
$(input).focus()
z innej planety. Powodzenia lub sprawdź inne odpowiedziźródło
setFocus()
- nie przeszkadza ludziom w wywołaniu zdarzenia fokusu. Brak pisaniasetFocus()
w ogóle uniemożliwiłby ludziom nazywanie tego, więc nie widzę korzyści. W rzeczywistości ludzie nadal mogliby dzwonić$('input').focus()
i sprawić, by przeszło.(function(){/*your code here*/})();
Dzięki temu funkcja setFocus będzie bezpieczna przed wywołaniem, a wartość logiczna nie zostanie zmieniona przez zewnętrzne skrypty.