1

私はおそらくこれについてすべて間違っていますが、ここで私がやろうとしていることは次のとおりです。

データベース情報に基づいて動的に生成される約 50 個の選択ボックスを含むフォームがあります。テキスト ボックスの ID を制御することはできませんが、それぞれにクラスを追加できます。フォームが送信される前に、ユーザーは選択ボックスから少なくとも 1 つの項目を選択する必要がありますが、4 つまで選択する必要があります。

私は少し眠くて、jQuery に全体的に慣れていませんが、$("form").submit をオーバーライドしようとしています。アドバイスや提案は大歓迎です。

$("form").submit(function() {

    $('.sportsCoachedValidation').each(function() {
        if ($('.sportsCoachedValidation :selected').text() != 'N/A') {
            sportsSelected++
        }                    
    });

    if (sportsSelected >= 1 && sportsSelected <= 4) {
        return true;
    }
    else if (sportsSelected > 4) {
        alert('You can only coach up to four sports.');
        sportsSelected = 0;
        return false;
    }
    else {
        alert('Please select at least one coached sport.');
        sportsSelected = 0;
        return false;
    }
});
4

3 に答える 3

1

OK、これをさらに単純化する別の方法はありますか?

$("form").submit(function() {

    // How about avoiding the "each" loop, and just let jQuery count 'em up? (Not actually tested!)
    var sportsSelected = $('.sportsCoachedValidation :selected[value!="N/A"]').length;

    if (sportsSelected >= 1 && sportsSelected <= 4) {
        return true;
    }
    else if (sportsSelected > 4) {
        alert('You can only coach up to four sports.');
        return false;
    }
    else {
        alert('Please select at least one coached sport.');
        return false;
    }
});

前回の投稿後にふと思ったこと。工夫が必要かもしれません。うまくいけば、それは完全な失敗ではなく、あなたがやろうとしていることに対して可能です. 幸運を!

于 2010-06-03T05:18:17.457 に答える
1

クラスの実際の入力がsportsCoachedValidationページにいくつありますか?

1つしかない場合、sportsSelectedカウントを集計する内側の部分は期待どおりに機能しません...いずれにせよ、現在、内側の部分は最初に選択された最初のオプションのみを確認しますページ上に他にいくつの選択肢があっても、選択ボックスを選択します。次のようなことを考えてみましょう:

$('.sportsCoachedValidation :selected').each(function() {
    if ($(this).text() != 'N/A') {
        sportsSelected++;
    }                    
});

私が行ったことは、フォーム全体で選択されたすべてのオプションのセットを返す外側の部分を少し変更したことです。内側の部分はthis、jquery "each" を介してループされている現在選択されているオプションを参照するために使用されます。あなたのバージョンは、ループしようとしているものを利用するのではなく、いくつかの新しい基準で再選択する効果があります。

頑張ってください!

于 2010-06-03T05:10:15.980 に答える
0

おおむね大丈夫そうです。$('.sportsCoachedValidation').each(function() {...の下の最初の部分全体を次のように置き換えることができます

var sportsSelected = $('.sportsCoachedValidation :selected').length;

于 2010-06-03T03:32:35.137 に答える