首页 > 解决方案 > 未在 Safari 浏览器中执行操作

问题描述

我在 JSF 中有一个简单的(ajaxified)commandLink,它适用于所有主要浏览器,除了 iphone 上最新的 Safari 浏览器。为了防止双重表单提交,我使用了一个禁用 ajax 开始状态按钮的通用片段:

<h:commandLink id="submit" action="#{ListingBean.searchListings}" value="Search">
    <f:ajax onevent="preventDblClick"/>
</h:commandLink>

function preventDblClick(data) {  

  switch (data.status) {
      case "begin":
          data.source.disabled = true;
          // data.source.className = 'blocked';
          break;
      case "complete":
          data.source.disabled = false;
          break;
  }    
}

问题是,Safari 由于禁用状态而没有提交操作。我还尝试为按钮设置一个 css 规则,以防止多次点击提交:

.blocked {
   pointer-events:none
}

但在这种情况下,safari 也不会提交操作。

更新:

生成的html中return false有问题:

<a id="submit" 
   onclick="mojarra.ab(this,event,'action',0,0,{'onevent':preventDblClick});return false">
     Search
</a>

即使我完全删除了 ajax-tag,表单也不会提交,并且生成的输出如下所示:

 <h:commandLink id="submit" action="#{ListingBean.searchListings}">
       Search
 </h:commandLink>

<a id="submit" 
  onclick="mojarra.jsfcljs(document.getElementById('form-search'),{'submit':'submit'},'');return false">
  Search
</a>

为什么return false会在这里?

由于越来越多的客户使用 iphone/safari:如何解决这个问题?

jsf版本是:

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.faces</artifactId>
    <version>2.2.14</version>
</dependency>

标签: cssjsfsafarijsf-2.2mojarra

解决方案


推荐阅读