一次单击多个链接

时间:2013-11-28 17:01:50

标签: javascript jsf

我有这个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>&nbsp;<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>&nbsp;<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>

2 个答案:

答案 0 :(得分:-1)

不要试图欺骗点击事件。

改为调用click事件后面的函数。

将DOM视为视图,而不是模型。

答案 1 :(得分:-1)

有没有办法让它一次点击所有这些?

据我所知,它不可能。因为单击该元素会在浏览器管理的事件队列中添加一个事件。 执行语句obj1.click();时,它会注册随obj1附加的单击事件。当此事件到达事件队列的前端时,浏览器会调用附加的相应事件处理程序 当一些事件处理程序代码正在执行时,触发的所有其他事件都会添加到队列中,并等待轮到他们移动到队列的前面。因此,您可以一个接一个地单击元素,但附加了它们的事件处理程序将执行一次一个。
原因:因为JavaScript使用单个执行线程

如果一个事件处理程序正在执行大型计算,则触发的所有事件都必须等待该计算完成 试试这个小提琴: here