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 コンポーネント ID ではなく、JSF によって生成された HTML 要素 ID を使用する必要があります。

ブラウザーでページを開き、右クリックしてソースを表示し、HTML ソースでJSF によって生成された HTML<input type="submit">要素を見つけます<a4j:commandButton>。次のようになります。

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

JavaScript は JSF コンポーネント ツリーではなく、HTML DOM ツリーで動作するため、JavaScript ではその ID を正確に使用する必要があります。

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 に答える