0

Liferay ポートレットを使用しています。ポートレットのリンクをクリックすると呼び出されるポップアップがあります。ユーザーが追加したいものに基づいて、Javascript を使用して要素を動的に作成する必要があります。一度作成しますul。以降毎回li、同じ に追加する必要がありますul。したがって、既に作成されている場合document.getElementId()は取得してアイテムを追加するために使用します。ul

問題: 問題は、フォームを送信するか、ポップアップを閉じて再度開くと、以前に作成された同じ要素がまだ存在するが非表示になっていることです。したがって、id で要素を取得するulと、古い値で古い要素を取得できます。ポップアップが送信されるか閉じられたときに、これを削除する必要があります。または、ページのポップアップが毎回読み込まれるとき。ulこの要素を削除するには、どのグローバル イベント ハンドラを使用すればよいですか? やってみwindow.onloadました。動作しません!

4

1 に答える 1

0

新しいフォームが必要になるたびに、フォームを再作成する必要があります。

また、要素を ID で取得しないでください。これは低速の DOM 操作であり、失敗する可能性があります。静的 HTML には ID を使用することをお勧めします。そのため、CSS と Javascript を指定できます。

getElementsByID の代わりに、必要に応じて Javascript コードで参照を保持してください。(送信時にフォームデータを抽出するために必要だと思います)。

些細な例 (ここで jquery を使用して申し訳ありませんが、とにかく共通語です):

var inputs = { givenname: $('<input type="text">')
             , surname: $('<input type="text">')
             , age: $('<input type="select">')
             , gender: $('<select>')
                 .append($('<option>').text('Female').val(0))
                 .append($('<option>').text('Male').val(1))
                 .append($('<option>').text('Other').val(2))
             }

var form = $('<div class="myform">');
Object.keys(inputs).forEach(function(k) {
    form.append(inputs[k]);
});

function getdata() {
    var o = {}
    Object.keys(inputs).forEach(function(k) {
        o.k = inputs[k].val();
    });
    return o;
}

popupFunction(form, getdata);

(作成される)関数popupFunctionは、フォームをどこかに移動するだけで(mycontainer.append(form))、データを送信する必要があるときに、getdata 関数を使用してデータを抽出します。

私が話した参照はinputsオブジェクトに保持されていることに注意してください。これらは DOM ノードの直接参照ではなく、jquery オブジェクトへの参照であり、jqueryval()関数で値を抽出できる DOM ノードを保持します。

于 2013-11-07T10:47:14.510 に答える