我有这个javascript:
function refreshGroup(){
var obj1 = document.getElementById("refresh0:link0");
var obj2 = document.getElementById("refresh1:link1");
obj1.click();
obj2.click();
};
并最终将向列表中添加更多对象。每个对象都是页面上的链接。我想创建一个方法来刷新特定链接组的所有链接。链接绑定到支持bean方法,该方法更新与链接关联的数据。除了在点击下一个链接之前等待每个链接完成运行之外,这就是我想要的。有没有办法让它一次点击所有这些?
编辑:
这是我试图模拟点击(JSF)的一些代码:
<h:form id="refresh#{loop.index}" >
<h:commandLink class="link" id="link#{loop.index}" value="#{a.status}" >
<f:ajax listener="#{a.getCheckAppMonitor}"
render=":errs#{loop.index} :refresh#{loop.index} :errs_#{i+1}"
onevent="refreshMoreLessLinks" />
</h:commandLink> <img id="img_#{loop.index}"
class="hidden"
src="resources/images/ajax-loader.gif"/>
</h:form>
JSF将其生成为如下所示:
<FORM id=refresh0 encType=application/x-www-form-urlencoded method=post
name=refresh0 action=/appmonitor/faces/appmonitorgreeting.xhtml><INPUT
value=refresh0 type=hidden name=refresh0> <A id=refresh0:link0
onclick="mojarra.ab(this,event,'action',0,'errs0 refresh0 errs_1',{'onevent':refreshMoreLessLinks});return false"
href="http://localhost:8080/appmonitor/faces/appmonitorgreeting.xhtml#">OK</A> <IMG
id=img_0 class=hidden
src="appmonitorgreeting_xhtml_files/ajax-loader.gif"><INPUT
id=javax.faces.ViewState value=7494473519347208075:5184408304577602221
type=hidden name=javax.faces.ViewState autocomplete="off"> </FORM>
答案 0 :(得分:-1)
不要试图欺骗点击事件。
改为调用click事件后面的函数。
将DOM视为视图,而不是模型。
答案 1 :(得分:-1)
有没有办法让它一次点击所有这些?
据我所知,它不可能。因为单击该元素会在浏览器管理的事件队列中添加一个事件。
执行语句obj1.click();
时,它会注册随obj1
附加的单击事件。当此事件到达事件队列的前端时,浏览器会调用附加的相应事件处理程序
当一些事件处理程序代码正在执行时,触发的所有其他事件都会添加到队列中,并等待轮到他们移动到队列的前面。因此,您可以一个接一个地单击元素,但附加了它们的事件处理程序将执行一次一个。
原因:因为JavaScript使用单个执行线程
如果一个事件处理程序正在执行大型计算,则触发的所有事件都必须等待该计算完成 试试这个小提琴: here