0

各プレーヤーの選択ボックスを使用して、最大18人のプレーヤー(11人の開始プレーヤーと7人のサブ)を格納するサッカーチームライン関数を開発しようとしています。

1つの選択ボックスからプレーヤーを選択すると、他のすべての選択ボックスでプレーヤーを非表示にして、ユーザーが同じプレーヤーを再度選択できないようにする必要があります。

私はこれを行うjavascript/jquery関数を作成しましたが、それは非常に長い時間がかかり、それをはるかに管理しやすくするための最良のオプションはwhileループを作成することだと思いますが、それをコーディングします。

現在のコード(開始XI用)はhttp://jsfiddle.net/aFDjS/で確認できます。

私がする必要があるのは、おそらく、カウントがこのようなプレーヤー番号と同じである場合に無視するために、別のwhileループ内にネストされたwhileループを持っていることだと思いますか?

i = 1;
playerNo = 1;
while (i < 19) {        
    while (playerNo < 19 && i != playerNo) {
        playerID = $("#player" + i + "Name option:selected").val();
        $("select#player" + playerNo + "Name >option" ).filter( "[class='"+ playerID +"']" ).hide();
        $("select#player" + playerNo + "Name >option" ).filter( "[class!='"+ playerID +"']" ).show();
        playerNo++;
    }
    i++;
}

これは正しい線に沿っていますか?

4

3 に答える 3

0

これはあなたに実装するアイデアを与えるかもしれません:http://jsfiddle.net/2jGDU/

$('#players').change(function () {
   $('#pl_11').prepend($('option:selected', this).clone());
   $('option:selected', this).remove();
   if ($('option', this).length <= 8) {
    $('option:first', this).remove();
    $('#sub').prepend($(this).html());
    $('option', this).remove();
   }
});
于 2013-02-12T11:46:11.113 に答える
0

さて、プログラムの完全な概念が何であるかはわかりませんが、あなたの解決策は少しやり過ぎだと思います。
各チェックボックスに名前(例"plr"+ID:)を付け、onclickイベントを追加します。イベントがトリガーされると、チェックボックスは同じ名前のすべてのチェックボックスを検索し、それらを無効にします。

 function selectPlr(event) {
     var other = document.getElementsByName(this.name);  //Get element collection
     for(var i=0; i<other.length; i++) {
       if(other[i]!=this) {  //Ignore itself
         other[i].disabled = this.checked;   //Disable if the player is picked, enable if unpicked
       }
     }
 }

もちろん、代わりにクラス名を使用できます。

 var other = $("input."+this.className);

これがアクティブなコードです。

于 2013-02-12T11:25:08.403 に答える
0

forいいえ、ループを使用する必要があります。

標準では、for何かを数えるときにループを使用whileし、イベントまたは値が変更されるのを待っているときにループを使用します。

それらのforループのロジックは理解するのが難しく、とにかく間違っているように見えます。

しかし、これに関係なく、これを行う最も簡単な方法は、jqueryの機能を使用することです。

$(function() {
    $("select").on("change", function() {
        //reset to showing all the options
        $("select option").show(); 

        //for each selected option
        $("select option:selected").each(function() {
            var optionSelected = this;
            var playerID = $(this).attr("class");
            //hide the option in all the other dropdowns
            $("option." + playerID).each(function() {
                if(this != optionSelected) {
                    $(this).hide();
                }
            });
        });
    });
});

ここでの実例:

http://jsfiddle.net/4avwm/1/

于 2013-02-12T11:38:38.510 に答える