2

私はフォームを持っており、jQuery の load 関数を介して新しい入力要素と選択要素を動的に追加しています。ロードされた要素が意図的に空である場合があり、その場合、スタイルを壊さないようにコンテナ div を非表示にする必要があります。

問題は、ロードされた要素を数えることができないように見えるため、非表示にする必要があるかどうかわからないことです。

たとえば、私はこれを持っています:

<div id="param_container"></div>

そして、いくつかのドロップダウンメニューの変更で、この関数をバインドしました:

alert($('#param_container').children().length);

// Returns and loads new element correctly. Can be empty.
$('#param_container').load('/get_params', {cat:category});

if ($('#param_container').children().length ) {
    $('#param_container').css('display', 'block');
} else {
    $('#param_container').css('display', 'none');
}

alert($('#param_container').children().length);

新しい子要素が追加されても、子の長さは常に 0 です。

何かご意見は?

編集:

私の解決策

$('#param_container').load('/get_params', {cat:category}, function(response) {
    if (response) {
        $('#param_container').css('display', 'block');
    } else {
        $('#param_container').css('display', 'none');
    }
});
4

3 に答える 3

6

その理由は、load呼び出しが非同期であり、関数が戻った後に完了するためです。

次のように、成功コールバックを使用できます。

alert($('#param_container').children().length);

// Returns and loads new element correctly. Can be empty.
$('#param_container').load('/get_params', {cat:category}, function() {
    if ($('#param_container').children().length ) {
        $('#param_container').css('display', 'block');
    } else {
        $('#param_container').css('display', 'none');
    }

    alert($('#param_container').children().length);
});
于 2012-12-11T10:38:18.210 に答える
2

div ie の ID から # を削除する必要があります

あなたが書いた:

<div id="#param_container"></div>

必要なもの:

<div id="param_container"></div>

jQuery で $('#param_container') を記述すると、id が「#」記号のない文字列と等しい要素を意味します。したがって、html コードに含める必要はありません。

于 2012-12-11T10:36:19.637 に答える
0

ここでloadAPIで言及されているように、完全なコールバックを試すことができます

「完全な」コールバックが提供されている場合は、後処理とHTML挿入が実行された後に実行されます。

$('#param_container').load('/get_params', {cat:category}, 
function() {
if ($('#param_container').children().length ) {
    $('#param_container').css('display', 'block');
} else {
    $('#param_container').css('display', 'none');
}
}
);
于 2012-12-11T10:54:33.557 に答える