2013-03-08 42 views
1

我想通過下拉列表將多個div添加到頁面。試圖添加多個項目,得到不穩定的結果

問題我有:

var antal = $('.room-holder').size(); 
var roomholder = '<div class="room-holder">' + $('.room-holder').html() + '</div>'; 
var rooms = ""; 

while ($(this).val() > (antal + 0)) { 
    rooms = rooms + roomholder; 
    antal++; 
} 

$(rooms).insertAfter($('.room-holder')); 
rooms = ""; 

我還與試圖for循環是這樣的:

var many = ($(this).val() - antal); 

for(i=0; i < many; i++){ 
    rooms = rooms + roomholder; 
} 

$(rooms).insertAfter($('.room-holder')); 
antal = $('.room-holder').size(); 
rooms = ""; 

下拉具有值從1 - 10

當我選擇第一次我得到正確數量的字段,但是當我第二次選擇時,我得到它應該添加的數量加上2-3個字段。

任何人都知道爲什麼?

編輯:我添加它的jsfiddle:http://jsfiddle.net/gmKJw/

+0

您可以創建在http://jsfiddle.net/ – 2013-03-08 09:23:41

+1

一個演示是,一個事件處理函數的主體?如果是這樣,我們可以看到綁定事件處理程序的代碼和完整的(相關的)函數聲明 - 當代碼中的'this'會更明顯。此外,下拉菜單的HTML會很好。 – 2013-03-08 09:23:47

+0

請你可以編輯你的問題並添加完整的JavaScript函數以及它如何被調用?知道這個是什麼將是非常有用的。 – andyb 2013-03-08 09:24:00

回答

0

的錯誤是要插入漸漸追加到每roomholder已經存在的房間。 演示:Fiddle

的修復是最後room-holder

變化

$(rooms).insertAfter($('.room-holder')); 

$(rooms).insertAfter($('.room-holder:last')); 

演示後追加到新room-holderFiddle

0

如果您在下拉列表中選擇的房間數少於當前顯示的房間數,則可能出現邏輯錯誤。我想提出以下解決方案(其中包括其他文體的改進):

var numRoomsReqd = parseInt($(this).val(), 10); 
var numCurrRooms = $('.room-holder').length;  // use length, not size 
var $roomholder = $('.room-holder').first().clone(); 
var $rooms = $(); 
$('.room-holder').slice(numRoomsReqd).remove() 

while (numCurrRooms < numRoomsReqd) { 
    $rooms = $rooms.add($roomholder.clone()); 
    numCurrRooms++; 
} 

$rooms.insertAfter($('.room-holder').last());