0

ページに多数の入力があり、少なくとも 5 つの項目が入力されていることを強制する必要があります。そうでない場合は、少なくとも 5 を入力する必要があるというメッセージを表示します。これまでのところ、次のことを試しましたが、エラーが何度も表示されます。これを行う適切な方法は何ですか?

$('div.inputs input').each(function(i) {
    $input = $(this);
    while (i < 5) {
        if ($($input).val() == '') {
            alert('must fill at least 5 items!');
        }
    }
});​
4

2 に答える 2

2

より良いセレクターを作成すると、次のことができます。

if ($('div.inputs input[value!=""]').length < 5) {
  alert('must fill at least 5 items!');
}

説明:

セレクターは、属性に何かがあるすべてのdiv.inputs input[value!=""]入力フィールドを選択しvalue、選択したアイテムの長さを取得できます。

前の解決策は (何とか) 機能しますが、より良い解決策をお勧めします。

if ($('div.inputs input').filter(function () { return $(this).val().length > 0; }).length < 5) {
  alert('must fill at least 5 items!');
}
于 2012-04-24T08:57:30.267 に答える
2

KARASZI István の回答に示されている方法はより適切ですが、コードの何が問題であり、どのように修正するかを説明する限り、(主な) 問題は次のwhile状態です。

while(i<5)

i...ループの内容によって変更されない変数 を評価しています。.each()ループの最初の反復でiは 0 であるため、while条件は真であり、真のままであるため、無限ループが発生します。

コードの一般的な構造を維持し、値をテストする各入力をループするには、次のようにします。

var filled = 0;

$('div.inputs input').each(function (i) {
    if (this.value != '') {
        filled++;
        if (filled === 5)
           return false;
    }
});

if (filled < 5) {
    alert('must fill at least 5 items!');
}

つまり、空白ではない入力ごとにカウンターをインクリメントし、ループ後にカウンターをチェックします。falseコールバック関数内から戻ると、ループがすぐに.each()停止することに注意してください。.each()空でない値が最小 5 個に達したら、数え続ける必要はありません。

于 2012-04-24T09:18:25.527 に答える