2013-08-18 44 views
1

我有使用以下代碼動態創建一個滑塊元件的功能:如何將動態創建的對象綁定到文檔就緒事件?

function NewDiv(){ 
     for (var count=0; count < parseFloat(sessvars.storey_count); count++) 
      { 
       var string="<br><div id='my-slider"+count+"' class='dragdealer'><div class='red-bar handle'><span id='drag-button"+count+"'>drag me</span></div></div>"; 
       $("body").append(string); 

       var slider_id ="my-slider"+count; 
       var drag_button_id = "drag-button"+count; 

       //OBJECT GETS CREATED BELOW 
       new Dragdealer(slider_id,{horizontal: true,x:Math.random(),animationCallback: function(x, y){ 
       document.getElementById(drag_button_id).innerHTML = x.toFixed(2); 
      } 
     }); 
    } 
} 

然而,這是每次調用所述滑塊移動具有將要被嵌入的功能聽者內animationCallback功能,並且我不得不以某種方式將它綁定到可能的事件。這是在其值更改時更新滑塊的最佳方法嗎?如果是這樣,我該如何去做這件事?

+1

'我必須以某種方式將它綁定到可能的事件'哼?爲什麼你不能把你的代碼放在回調中? – SLaks

+0

因爲在滑塊位置改變時,回調中的代碼不會被執行。它適用於非動態創建的滑塊,而不適用於使用此功能創建的滑塊。 – Louis93

+0

只需將'NewDiv'調用放入'ready'處理程序中? – Bergi

回答

1

您所有的animationCallback函數都在關閉相同的drag_button_id變量。
因此,他們都更新最後一個。

您需要將for循環的正文封裝在一個單獨的函數中,以便每個閉包都有自己的變量(因爲Javascript沒有塊範圍)。

+0

對不起,你能解釋它是如何關閉相同的變量?你說的是正確的,因爲只有最後一個滑塊有效。但是,當我登錄'drag_button_id'時,似乎該函數正確循環。爲什麼? – Louis93

+0

如果你能回答我的問題,那會很好,但你的鏈接確實有幫助。 Thans。 – Louis93

+1

@ Louis93:''drag_button_id'隨着循環運行而變化。回調僅在循環結束後運行。 – SLaks

相關問題