Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何判断是什么触发了jQuery focus()?_Javascript_Jquery - Fatal编程技术网

Javascript 如何判断是什么触发了jQuery focus()?

Javascript 如何判断是什么触发了jQuery focus()?,javascript,jquery,Javascript,Jquery,我有一个输入字段和一个按钮。单击按钮时,输入字段必须获得焦点 我需要的行为略有不同,这取决于输入字段是由用户手动聚焦还是由于按钮被点击而聚焦 这似乎是相对简单的,但到目前为止我还没有想出一个解决方案。欢迎提出任何意见 $("button").click(function() { target_input = $("input"); target_input.focus(); }); $("input").focus(function() { // if focus do

我有一个输入字段和一个按钮。单击按钮时,输入字段必须获得焦点

我需要的行为略有不同,这取决于输入字段是由用户手动聚焦还是由于按钮被点击而聚焦

这似乎是相对简单的,但到目前为止我还没有想出一个解决方案。欢迎提出任何意见

$("button").click(function() {
    target_input = $("input");
    target_input.focus();
});

$("input").focus(function() {
    // if focus done manually by user
    //    do something
    // if focus done via button
    //    do something else
});
您应该能够为此使用:

事件接口的isTrusted只读属性是布尔值 如果事件由用户操作生成,则为true;如果为false,则为false 通过脚本创建或修改事件或通过 调度事件


如评论中所述,IE和Safari都不是这样的。

这里有一个解决方案,它不使用额外的变量,而是检查事件

$("button").click(function() {
    target_input = $("input");
    target_input.focus();
});

$("input").focus(function(e) {
    // if focus done manually by user
    //    do something
    // if focus done via button
    //    do something else

   if(e.originalEvent.relatedTarget){
      // only from button events
   }

   // here is from all events
});
如果我们没有使用按钮来创建焦点,则此
e.originalEvent.relatedTarget
将返回null。
请记住将
e
添加到函数中。

这在没有全局变量的情况下工作,并且是跨浏览器工作解决方案:

$(“按钮”)。单击(函数(){
$(this.prev('input').focus()
})
$('input')。单击(函数(e){//是,请改为收听单击
//仅当直接单击输入时,原始事件才存在
如果(如原始事件){
console.log('手动触发')
}
})

焦点输入

焦点输入
您可以使用触发器而不是焦点(),并设置额外的参数。在焦点事件中,您可以阅读额外的参数,但实际上无法使其工作…IE和Safari不支持它
$("button").click(function() {
    target_input = $("input");
    target_input.focus();
});

$("input").focus(function(e) {
    // if focus done manually by user
    //    do something
    // if focus done via button
    //    do something else

   if(e.originalEvent.relatedTarget){
      // only from button events
   }

   // here is from all events
});