web-dev-qa-db-ja.com

フォームのreRenderの後にJavaScript関数を再実行する方法は?

フォームが再レンダリングされた直後にjavascriptを再実行する必要があります。簡単に言うと、XHTMLコンテンツの後にjavascriptを挿入しても、部分的なリクエストであるため役に立ちません。また、フォームを再レンダリングするcommandButtonが、複数の場所で使用されるJSFコンポーネントにあるため、「onComplete」を使用できません。ローカルで修正を入手する必要があります。

何か方法はありますか?この場合、f:ajaxが役立つかどうか疑問に思いました。

手がかりがありましたらお知らせください。

17
A.G.

BalusCの最初の答えは、JQuery/JSで複雑な操作を実行する場合に最も適切であり、特に this を気にしません

より複雑なJSの場合、グローバルイベントハンドラーを使用することを決定し、たとえば要素にJSをbind関数に使用すると、これらの関数は再バインドされるため(2回実行されるため)、何を再実行する必要があるかを特定する方法。

私が最後に行ったのは、イベントコールバックからIDを取得し、関連するJS/JQueryのみを実行することでした。

jsf.ajax.addOnEvent(ajaxCompleteProcess);


function ajaxCompleteProcess(data) {
    if (data.status && data.status === 'success') {
        var children1 = data.responseXML.children;
        for (i = 0; i < children1.length; i += 1) {
            var children2 = children1[i].children;
            for (j = 0; j < children2.length; j += 1) {
                var children3 = children2[j].children;
                for (y = 0; y < children3.length; y += 1) {
                    if (children3[y].id.indexOf('javax.faces.ViewState') != -1)
                        continue;
                    elementProcess(('#' + children3[y].id.replace(/\:/g, '\\:')));
                }
            }
        }
    }
}

注:これらの醜いforループはおそらく必要ありません(clildren [0]を使用できます)が、仕様を確認する時間はまだありません。

0