0

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

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

当我现在运行它时。但是,它会为每个物品发出警报,它不仅会为每个掉落的物品发出警报,而且如果有 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();   
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(){}) 块移到 drop 处理程序之外,以防止它多次触发该函数。

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