Проверьте, вызвано ли событие человеком



У меня есть обработчик, прикрепленный к событию, и я хотел бы, чтобы он выполнялся только в том случае, если он вызван человеком, а не методом trigger (). Как я могу сказать разницу?



например,



$('.checkbox').change(function(e){
if (e.isHuman())
{
alert ('human');
}
});

$('.checkbox').trigger('change'); //doesn't alert
383   7  

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
}

вы можете использовать onmousedown для обнаружения щелчка мыши против вызова триггера ().

Я бы подумал о возможности, когда вы проверяете положение мыши, например:

  • клик
  • получить положение мыши
  • перекрывает координаты кнопки
  • ...

если у вас есть контроль над всем вашим кодом, никаких инопланетных звонков $(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

    Ничего не найдено.