2012-05-09 39 views
0

我知道這是一個類似的問題,我以前的一個,但略有不同。爲每一滴創建隱藏的場元素

我有這個腳本將每個'dropped'元素添加到列表中。現在我需要將它添加到變量/隱藏字段中,以便通過表單將其傳遞到下一頁。

當我運行它的時刻。然而,它會警告每個項目,但不僅僅是每個項目被丟棄,但如果有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(); 
+0

那麼,每次你放下一個物品時,它會爲每個物品運行一個單獨的'submit'事件? – Blazemonger

+0

他在該代碼中添加一個提交處理程序到表單中,而不是每次都提交,但他正在添加一個提交處理程序,每次下載 –

+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());     
}); 

內訪問當前項目假設你的代碼是下降事件處理程序中,你也是,每次您每次添加一個提交處理程序。這意味着每次你下降,你排隊另一個提交事件。這可能是不希望的。將此提交(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()) 

你可能有一個名爲元素得到它提交在您的服務器端語言中數組擺弄,但你也是一個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; 

    }); 
+0

hmm。這似乎做同樣的事情。 –

+0

當我把提交處理程序放在任何地方時,它提交表單,但不顯示警報並忽略返回false。 –

+0

@ChrisTill我已經爲你更新了一些示例事件處理程序的答案。很有可能你的'listItems' obj是未定義的或者什麼的,這就是爲什麼沒有項目被警告。我在提交處理程序中移動了選擇器。 –