【问题标题】:Safari: focus event doesn't work on button elementSafari:焦点事件在按钮元素上不起作用
【发布时间】:2017-03-13 08:00:01
【问题描述】:

当被点击时,焦点事件在除 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>

【问题讨论】:

    标签: javascript jquery safari


    【解决方案1】:
    【解决方案2】:

    为什么点击时焦点事件没有触发?

    我们通过研究发现,Mac 上的 Safari 和 FireFox 不会在您单击按钮时将焦点设置在按钮上。

    我们解决这个问题的方法是为我们的按钮添加一个点击监听器,并在被点击的按钮上调用 focus()。

    在 Angular 中它看起来像这样:

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

    【讨论】:

      【解决方案3】:

      https://bugs.webkit.org/show_bug.cgi?id=13724

      这在 MacOS 上按预期工作。单击按钮、单选按钮或复选框不会使元素获得焦点 - 因此它不会失去焦点并触发模糊。

      解决方案是给它一个点击事件,让元素获得焦点。

      【讨论】:

        【解决方案4】:

        Angular 8+ 解决方案:

        1. 在您的按钮标签中 添加#toggleButton 和 (click)="onClick(); $event.stopPropagation()"

        exp:

        <button #toggleButton type="button"
            (click)="onClick(); $event.stopPropagation()"></button>
        
        1. 在您的 component.ts 中添加 ==>在构造函数之前

        ***@ViewChild('toggleButton', { static: true }) toggleButton: ElementRef;


        onclick(){
                this.toggleButton.nativeElement.focus();
        }
        

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

          • 我认为相同的问题不一样。它只在 Safari 上重现。我想要的是在单击时获得按钮上的焦点事件。
          • 好吧,我刚刚发现这个文档基本上说 Safari 在单击后不会聚焦按钮:developer.mozilla.org/en-US/docs/Web/HTML/Element/…
          猜你喜欢
          • 1970-01-01
          • 2011-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-28
          相关资源
          最近更新 更多