项目问题:
有个查询按钮,查询按钮是用<h:commandLink id="a" action="b" value="qqqq" οnclick="c(this)">,由于查询响应时间较长,防止用户反复查询,在查询过后需要禁止此按钮再次点击。
尝试1:
在c函数中使用jquery $("#a").attr('disabled',true);//结果-->无效
原因:
jquery取commandLink标签需要这样取,类似$('#form1\\:a'),form1为标签所在的表单。
尝试2:
$('#form1\\:a').attr('disabled',true);//结果-->无效
于是尝试$('#form1\\:a').val();//结果underfined
那就奇了怪了,原因在于commandLink标签的解析(对应于<h:commandLink id="a" action="b" value="qqqq" οnclick="c(this)">),大致如下
<a href="#" onclick= "c函数中的内容;
执行form1的onsubmit()操作;
return false; "
id="form1:a" name="form1:a">qqqq</a>
1、commandLink解析成超链接
2、href中为"#"
3、onclick中先执行我们写的c函数,然后执行表单提交,然后return false阻止超链接跳转href="#"
那就明白了,尝试取$('#form1\\:a').text();果然能取到qqqq,问题解决。
新的问题来了,$('#form1\\:a').attr("disabled",true)为什么还是没有效果。
查了资料,有的说是浏览器问题,有的说a标签没有disable属性,有的说有容易产生Bug
那在我的尝试下直接在commandLink中添加disabled='true'确实能阻止用户点击,但是用jquery动态添加属性就无效,
如果有知道原因的大佬可以留言告知。
解决办法:
$(“#form1\\:a”).attr("disabled",true);
$("#form1\\:a").css("pointer-events","none");
亲测有用