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
});