为每个drop创建隐藏的field元素

时间:2012-05-09 13:11:11

标签: javascript jquery loops foreach

我知道这与我之前的问题类似但是它略有不同。

我有这个脚本将每个'dropped'元素添加到列表中。现在我需要将它添加到变量/隐藏字段中,以便我可以通过表单将其传递到下一页。

此刻我正在运行它。它会警告每一个,但它不仅仅针对掉落的每个项目,但是如果有10个项目被丢弃,则每个项目下降10次,而不是每个项目掉落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();   

1 个答案:

答案 0 :(得分:1)

问题在于此代码

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

您正在提醒每个列表项的所有列表项的文本。

使用jQuery(this)访问每个块中的当前项

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

假设您的代码位于drop事件处理程序中,每次删除时都会添加一个提交处理程序。这意味着每次删除时,都会排队另一个提交事件。这可能不是所希望的。将此提交(function(){})块移动到drop handler之外,以防止它多次触发该函数。

$('#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;

    });