如何检查焦点事件是否以编程方式触发

时间:2017-06-18 14:32:52

标签: javascript jquery

我想知道焦点事件是以程序方式还是由人类触发?

我正在写剧本的一部分

    jQuery( document ).on( 'focus', '#song_artist_focus', function(event) {
                if(event.originalEvent === undefined ){
                 alert('I am not human');
                 return;}
                alert('I am human') ;
           });

当我像这样编程这个脚本时

jQuery('#song_artist_focus').focus();

它仍然表明事件是由人类触发的。请帮帮忙?

更新

我查看了此解决方案Check if event is triggered by a human。但不适用于焦点事件。

2 个答案:

答案 0 :(得分:2)

您的问题是focus事件没有冒泡 jQuery用一点魔法修复它使其更像其他事件,但它仍然不像自然气泡的事件那样工作。
要解决此问题,请使用focusin事件,因为它会冒泡,并执行.trigger('focusin')

jQuery(document).on('focusin', '#song_artist_focus', function(event) {
  if (event.originalEvent === undefined) {
    console.log('I am not human');
  } else {
    console.log('I am human');
  }
});


jQuery('#song_artist_focus').trigger('focusin');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="song_artist_focus">

答案 1 :(得分:1)

Html:

<input type='text' id='try' >try
<button id='click'>Click</button>

jQuery:

$("#try").focus(function(event) {
    if (event.originalEvent === undefined) {
        console.log('not human')
    } else {
        console.log(' human');
    }
});

$('#click').click(function(event) {
    jQuery('#try').focus();
});

尝试一下,你会得到预期的结果。