Скажімо, у мене визначено обробник кліків:
$("#foo").click(function(e){
});
Як я можу, в обробнику функцій, визначити, чи подія була запущена програмно, чи користувачем?
Скажімо, у мене визначено обробник кліків:
$("#foo").click(function(e){
});
Як я можу, в обробнику функцій, визначити, чи подія була запущена програмно, чи користувачем?
$x.click()або $x.trigger('click').
Відповіді:
Ви можете поглянути на об’єкт події e. Якщо подія була викликана реальним натисканням кнопки, ви будете мати такі речі , як clientX, clientY, pageX, pageYі т.д. всередині eі вони будуть числа; ці цифри пов’язані з положенням миші при спрацьовуванні клацання, але вони, ймовірно, будуть присутні, навіть якщо клацання було ініційовано за допомогою клавіатури. Якщо подія була ініційована до $x.click()цього часу, у вас не буде звичайних значень позицій у e. Ви також можете подивитися на originalEventнерухомість , якої не повинно бути там, якщо подія відбулася $x.click().
Можливо щось подібне:
$("#foo").click(function(e){
if(e.hasOwnProperty('originalEvent'))
// Probably a real click.
else
// Probably a fake click.
});
І ось маленька пісочниця, з якою можна пограти: http://jsfiddle.net/UtzND/
originalEvent? Чи це правильно? Чи є десь координати? Чи узгоджуються координати? Координати всередині #foo? ...
Ви можете використовувати додатковий параметр, як зазначено в посібнику для запуску jQuery :
$("#foo").click(function(e, from){
if (from == null)
from = 'User';
// rest of your code
});
$('#foo').trigger('click', ['Trigger']);
$x.click(), а .click()абонент повинен чітко сказати вам, що вони підробляють це. Це може бути проблемою, а може і не залежати від того, що задумав Кевін Овоцький.
$x.click()що є eventHandler (для кліку користувача, який може бути "нормальним")
Вже є відповідь на інше запитання.
Як визначити, чи є клацання () клацанням миші або викликане якимсь кодом?
Використовуйте whichвластивість об’єкта події. Це має бути undefinedдля подій, викликаних кодом
$("#someElem").click(function(e) {
if (e.which) {
// Actually clicked
} else {
// Triggered by code
}
});
Приклад JsFiddle - http://jsfiddle.net/interdream/frw8j/
Сподіваюся, це допоможе!
selectбуло б дати e.which==undefinedнавіть за справжню подію.
Я спробував усі вищезазначені рішення, і в моєму випадку нічого не вдалося. Нижче рішення працювало для мене. Сподіваюся, це допоможе і вам.
$(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 визначає event.isTrusted. Наразі це підтримується лише в IE9 + та Firefox (на основі моїх тестів. Я також читав (хоча і не ретельно досліджений), що це можна замінити в деяких браузерах і, мабуть, ще не на 100% готове до того, щоб йому дійсно довіряли (на жаль).
Це модифікована версія скрипки @ mu, яка працює на IE та Firefox.
isTrustedпідтримується та не можна записати. Я думаю, що справжня відповідь залежить від того, чому стоїть це питання, і ми так і не з’ясували, чому.
Я не збираюся брати участь в інтелектуальному обговоренні, коді, який працював для мене для фільтрування, .click()і .trigger('click')є
$(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
}
});