0
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 的控制台不显示任何消息。这是如何引起的,我该如何解决?

4

2 回答 2

3

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

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

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

您需要在 JavaScript 中准确使用该 ID,因为 JavaScript 在 HTML DOM 树上工作,而不是在 JSF 组件树上工作。

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

此外,您最好使用<a4j:commandLink>而不是<a4j:commandButton>为了开始click()工作。

于 2012-04-25T14:34:24.803 回答
2

是否可以通过 onclick 调用document.getElementById("my-id").click()?至少在 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的回答

于 2012-04-25T14:42:13.043 回答