2012-07-09 47 views
0

我真的不知道我會如何做到這一點。這是一個概念問題,而不是一個代碼問題,所以我只是發表一個例子:Javascript,將一個變量傳遞給點擊事件?

object = $('#div'); 

function doSomething(object) { 
    //iterates through a list and creates a UL with items in corresponding to that list. 
    $(body).append("<li id='clickme'>Hello world</li>"); 
} 

function createModal(object) { 
    //creates modal dialogue. 
    doSomething(object); 
    //more stuff 
} 

$('#clickme').live("click", function() { 
    //I need access to object (not the object declared at first, 
    //the object passed into doSomething) here. 

}); 

任何想法,我會做這樣的事情? doSomething會創建一組LI並將參數傳遞給它。當這些函數創建的LI被點擊時,它們需要與傳入doSomething的參數進行交互。有沒有辦法綁定他們或什麼?

對不起,如果我沒有任何意義。

+0

當然通過使用VAR對象將允許你聲明該對象變量在click函數中使用這個變量? – Undefined 2012-07-09 15:01:55

+0

不能看到你的問題,對象應該是可訪問的,因爲它的全球?! – worenga 2012-07-09 15:05:57

+0

爲什麼不在'createModal'函數內部'return doSomething(object);'內部#clickme'點擊函數,像'var clickme_object = createModal(object)'一樣分配它?然後您可以通過調用該變量來訪問它。如果我正確理解你的問題...... – 2012-07-09 15:05:59

回答

5

您可以使用jquery data函數將數據關聯到您的DOM元素。您在處理事件時可以閱讀這些數據。

另一種方法,通常不推薦,但在一個大通道中構建html並且沒有對DOM元素的簡單訪問權限,並且只有字符串(或鍵)時,它是有用的,稍後使用jquery's attr函數檢索它。儘可能我建議你使用數據功能。

2

商店的明確參考:

function doSomething(object) { 
    //iterates through a list and creates a UL with items in corresponding to that list. 
    $(body).append(
     $("<li/>", { id: 'clickme', text: 'Hello world',}) 
     .data('object', object) 
    ); 
} 

然後在事件處理程序可以檢索參考:

$('#clickme').live("click", function() { 
    var object = $(this).data('object'); 
    // ... 
}); 

而且.live()被棄用:

$('body').on('click', '#clickme', function() { 

是對時髦的新途徑綁定委託事件處理程序。

0
object = $('#div'); 

function doSomething(object) { 
    $(body).append("<li id='clickme'>Hello world</li>"); 
    $('#clickme').click(function(evt) { 
     // Here you have access to `object` 
    }); 
} 

function createModal(object) { 
    //creates modal dialogue. 
    doSomething(object); 
    //more stuff 
} 

這可能還不夠。如果要創建多個鏈接,而不是僅使用ID爲clickme的單個鏈接,則可能需要在附加點擊處理程序時找到不同的選擇器。但是,如果以這種方式嵌套功能,則可以訪問創建點擊處理程序時使用的參數object

0

另一種選擇是申報,並附加處理程序中的位置,其中所述參數是在範圍上,通過封閉(未測試):

function doSomething(object) { 
    $(body).append("<li id='clickme'>Hello world</li>").click(function() { 
     //object is accessible here 
    }); 
} 
相關問題