jquery Safari:焦点事件对按钮元素不起作用

6qqygrtg  于 2023-10-17  发布在  jQuery
关注(0)|答案(7)|浏览(147)

focus事件在所有浏览器上都可以正常工作,但在Safari上单击时除外。
它在div[tabindex]元素上工作正常,但在button或input:button元素上不工作。
当我使用$('. btn').focus()时,它也可以获取焦点事件。
为什么焦点事件没有在点击时触发?
下面是我的代码:

$(".btn").focus(function (e) {
	$(".result").append("<p>Event:"+e.type+", target:"+e.target+"</p>");
})
.result{min-height:200px;border:1px solid #000;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button class="btn">button 1</button>
<input type="button" class="btn" value="button 2"/>
<div class="btn" tabindex="0">div element</div>
<h1>
Result:
</h1>
<div class="result">

</div>
sgtfey8w

sgtfey8w1#

不支持以下文档:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus

0yg35tkg

0yg35tkg2#

为什么焦点事件没有在点击时触发?
我们通过研究发现,Mac上的Safari和FireFox在你点击按钮时不会将焦点设置在按钮上。
我们解决这个问题的方法是向按钮添加一个点击监听器,并在被点击的按钮上调用focus()。
在Angular中,它看起来像这样:

<button (click)="myClickFunction(); $event.target.focus();>My Button</button>
k4ymrczo

k4ymrczo3#

参见https://bugs.webkit.org/show_bug.cgi?id=13724
这在MacOS上按预期工作。单击按钮、单选按钮或复选框不会给予元素焦点-因此它不会失去焦点并触发模糊。
解决方案是给予一个单击事件,使元素获得焦点。

relj7zay

relj7zay4#

使用下面的代码修复网页上的所有按钮:

(function() {
  var buttons = document.querySelectorAll("button");
  for (var i=0; i<=buttons.length-1; i++) {
    (function(index) {
      var button = buttons[index];
      button.addEventListener("click", function() { button.focus(); });
    })(i);
  }
})();
hgncfbus

hgncfbus5#

Angular 8+解决方案:
1.在按钮标签中添加#toggleButton和(click)=“onClick();$event.stopPropagation()”
exp:

<button #toggleButton type="button"
    (click)="onClick(); $event.stopPropagation()"></button>

1.在component.ts中,add ==>before构造函数中

  • @ViewChild('toggleButton', { static: true }) toggleButton: ElementRef;
onclick(){
        this.toggleButton.nativeElement.focus();
}
uqjltbpv

uqjltbpv6#

这可能会解决这个问题:https://stackoverflow.com/a/1269767/2731261

$(".btn").mouseup(function(e){
    e.preventDefault();
});
q1qsirdb

q1qsirdb7#

有一些Safari设置在默认情况下未启用:·前往Safari >偏好设置。

  • 单击“高级”选项卡。
  • 选中底部的框,上面写着“按Tab突出显示网页上的每个项目”。

相关问题