Проверьте, вызвано ли событие человеком
У меня есть обработчик, прикрепленный к событию, и я хотел бы, чтобы он выполнялся только в том случае, если он вызван человеком, а не методом trigger (). Как я могу сказать разницу?
например,
$('.checkbox').change(function(e){
if (e.isHuman())
{
alert ('human');
}
});
$('.checkbox').trigger('change'); //doesn't alert
7 ответов:
вы можете проверить
e.originalEvent: если он определен, то щелчок является человеческим:посмотрите на скрипку http://jsfiddle.net/Uf8Wv/
$('.checkbox').change(function(e){ if (e.originalEvent !== undefined) { alert ('human'); } });мой пример в скрипку:
<input type='checkbox' id='try' >try <button id='click'>Click</button> $("#try").click(function(event) { if (event.originalEvent === undefined) { alert('not human') } else { alert(' human'); } }); $('#click').click(function(event) { $("#try").click(); });
более прямо вперед, чем выше будет:
$('.checkbox').change(function(e){ if (e.isTrigger) { alert ('not a human'); } }); $('.checkbox').trigger('change'); //doesn't alert
Я думаю, что единственный способ сделать это было бы передать дополнительный параметр на
triggerвызов на документация.$('.checkbox').change(function(e, isTriggered){ if (!isTriggered) { alert ('human'); } }); $('.checkbox').trigger('change', [true]); //doesn't alertПример:http://jsfiddle.net/wG2KY/
принятый ответ не работа для меня. Прошло 6 лет и jQuery сильно изменился с тех пор.
event.originalEventвозвращает всегдаtrueС jQuery 1.9.х. Я имею в виду объект всегда существует, но содержание разное.те, кто использует более новые версии jQuery, могут попробовать это. Работает на Chrome, Edge, IE, Opera, FF
if ((event.originalEvent.isTrusted === true && event.originalEvent.isPrimary === undefined) || event.originalEvent.isPrimary === true) { //Hey hooman it is you }
Я бы подумал о возможности, когда вы проверяете положение мыши, например:
- клик
- получить положение мыши
- перекрывает координаты кнопки
- ...
если у вас есть контроль над всем вашим кодом, никаких инопланетных звонков
$(input).focus()чемsetFocus().использование глобальной переменной является правильным способом для меня.
var globalIsHuman = true; $('input').on('focus', function (){ if(globalIsHuman){ console.log('hello human, come and give me a hug'); }else{ console.log('alien, get away, i hate you..'); } globalIsHuman = true; }); // alien set focus function setFocus(){ globalIsHuman = false; $('input').focus(); } // human use mouse, finger, foot... whatever to touch the inputесли какой-то инопланетянин все еще хочет позвонить
$(input).focus()С другой планеты. Удачи или проверьте другие ответы
Comments