无法通过JavaScript单击隐藏按钮

时间:2012-04-25 14:31:51

标签: javascript jsf richfaces ajax4jsf jsf-1.2

function openEditDialog(){
    window.showModalDialog('/atmew/pages/asset/searchInclude/assetEdit.mew');
    document.getElementById('reData').click();
    alert('after rerender');
}

然后有一个按钮:

<a4j:commandLink id="edit" action="#{searchController.openAssetEdit}" 
    oncomplete="openEditDialog()" immediate="true" ajaxSingle="true">
    <h:graphicImage url="/images/edit_icon.png" </h:graphicImage>
    <f:param name="arId" id="arId" value="#{vo.assetReceiving.id}"/>
</a4j:commandLink>

其他按钮

<a4j:commandButton id="reData" reRender="data_grid" style="visibility: hidden;" onclick="javascript:alert('rerender clicked');"></a4j:commandButton>

未点击reData按钮。 IE的控制台不显示任何消息。这是怎么造成的,我该如何解决?

2 个答案:

答案 0 :(得分:3)

您需要使用JSF生成的HTML元素ID,而不是JSF组件ID。

在浏览器中打开页面,右键单击查看源,找到HTML源代码中<input type="submit">的JSF生成的HTML <a4j:commandButton>元素。它看起来像这样:

<input type="submit" id="someFormId:reData" ... />

您需要在JavaScript中使用该ID,因为JavaScript只适用于HTML DOM树,而不适用于JSF组件树。

document.getElementById('someFormId:reData').click();

此外,您最好使用<a4j:commandLink>代替<a4j:commandButton>,以便click()能够正常使用。

答案 1 :(得分:1)

是否可以通过document.getElementById("my-id").click()拨打onclick?至少在Chrome中执行此操作会向我显示错误“没有方法'点击'”。或者这可能在使用jsf时? (编辑:对不起,可能是一个愚蠢的问题,但我从未使用过jsf)

我认为在本机节点上人为创建点击事件的唯一可靠方法是通过浏览器机制来实现:

function doEvent(element, eventType, event) {
  // modern browsers
  if (document.createEvent) {
    event = document.createEvent("MouseEvents");
    event.initMouseEvent(eventType, true, true, element.ownerDocument.defaultView,
                0, 0, 0, 0, 0, false, false, false, false, 0, null);
    element.dispatchEvent(event);

  // older browsers (IE6/7 for exmaple)
  } else if (element.fireEvent) {
    element.fireEvent("on"+eventType);
  }
}

doEvent(document.getElementById("my-id"), "click");

关于ID,请考虑BalusC

的答案