0

これは前の質問と似ていますが、少し異なります。

このスクリプトを使用して、「ドロップされた」各要素をリストに追加します。フォームを介して次のページに渡すことができるように、変数/非表示フィールドに追加する必要があります。

私が今それを実行するとき。アラートはそれぞれに警告しますが、ドロップされたすべてのアイテムに対してだけでなく、ドロップされたアイテムが10個ある場合は、ドロップされたアイテムごとに1回ではなく、ドロップされたアイテムごとに10回実行されます。

どんな助けでも素晴らしいでしょう。

//Record and add dropped items to list
            var txt = $("#listbox");
            var dtstart = copiedEventObject.start + '\n'
            var caltitle = copiedEventObject.title

            var txt = $('#listbox');     
            txt.append("<li class ='listItem'> "+dtstart +"</li>")

            var listItems = $('.listItem'); 

                $('#calendarform').submit(function() {

                        listItems.each(function(){   //For each event do this:

                            alert( listItems.text() );                  

                        });

                    return false;

                });

            // remove the element from the "Draggable Events" list
            $(this).remove();   
4

1 に答える 1

0

問題はこのコードにあります

listItems.each(function(){  //For each event do this:
    alert( listItems.text() );                  
});

各リスト項目のすべてのリスト項目のテキストを警告しています。

jQuery(this) を使用して、各ブロック内の現在のアイテムにアクセスします

listItems.each(function(){   //For each event do this:
    alert( $(this).text() );                  
});

コードがドロップ イベント ハンドラー内にあると仮定すると、ドロップするたびにサブミット ハンドラーも追加されます。これは、ドロップするたびに、別の送信イベントをキューに入れることを意味します。これはおそらく望ましくありません。この submit(function(){}) ブロックをドロップ ハンドラの外に移動して、その関数が複数回起動されないようにします。

$('#calendarform').submit(function(e) {
    var listItems = $('.listItem'); 
    listItems.each(function(){   //For each event do this:
        alert( listItems.text() );                  
    });
    e.preventDefault();//stop normal behavior
    return false;

});

その場で要素を作成するには、jQuery に html を渡し、appendそれをフォームに渡すだけです。

$('<input type="hidden" name="listItem[]"/>').appendTo("#calendarForm").val(listItem.text())

サーバー側言語で配列として送信するために name 要素をいじる必要があるかもしれませんがeach、インデックスを提供するループ内にもいるので、次のことができます。

$('#calendarform').submit(function(e) {
        var form = $(this);
        var listItems = $('.listItem'); 
        listItems.each(function(index){   //For each event do this:
            var listItem = $(this);
            $("<input type='hidden'/>").val(listItem.text()).appendTo(form).attr('name', 'listItem[' + index + ']');
        });
        e.preventDefault();//stop normal behavior
        return false;

    });
于 2012-05-09T13:15:43.140 に答える