我在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>