2015-09-09 36 views
0

我正在動態生成onclick處理函數並使用attr方法設置它。將動態生成的對象數組傳遞給onclick處理程序

var originReference = "myDynamicString"; 
var stringArray = []; 
stringArray.push("Data1"); 
stringArray.push("Data2"); 
var objArray = []; 
objArray.push({name: "Category 1", y: 10}); 
objArray.push({name: "Category 2", y: 20}); 

onclickReference.attr("onclick", "drawChart('" + originReference + "',[" + stringArray + "],[" + objArray + "]); return false;"); 

有了這個代碼,該objArray沒有被正確地傳遞給處理事件,因爲我得到的錯誤: "SyntaxError: missing ] after element list"。只使用一個字符串數組(無JSON)。數據傳遞給處理程序就好了。

如何格式化我的對象數組在onclick處理程序?

+1

我不認爲你需要連接變量。你可以簡單地使用drawChart(originReference,stringArray,jsonArray); – Thangadurai

+0

P.S.這段代碼中的任何地方都沒有「JSON數組」。你的'jsonArray'只是一個對象數組。 JSON是數據的*字符串表示*,類似於JavaScript對象/數組語法。如果它不是字符串,那不是JSON。 –

+0

謝謝,我站在更正。改變了問題中的措詞。 – kittyhawk

回答

2

請勿使用onclick屬性來綁定事件。使用addEventListener添加事件。

onclickReference.click(function(){ 
    drawChart(originReference, stringArray, jsonArray); 
    return false; 
}); 

編輯:根據你的評論,你是綁定循環中的事件。在這種情況下,您需要創建一個閉包來「捕獲」變量的值。

試試這個:

onclickReference.each(function(){ 
    // Define your variables inside this new scope 
    var originReference = "myDynamicString"; 
    var stringArray = []; 
    var objArray = []; 

    this.click(function(){ 
     drawChart(originReference, stringArray, jsonArray); 
     return false; 
    }); 
}); 
+0

我的'onclickReference'是這樣填充的:'onclickReference = $(this).find(「a」);'。因此,'addEventListener'會拋出**而不是函數**錯誤。如果我引用'$(this).find(「a」)[0];'我的數據似乎並不存在 – kittyhawk

+0

沒有意識到'onclickReference'是一個jQuery對象。在這種情況下,它只是'onclickReference.click(function(){...});'。 –

+0

這不起作用,因爲我通過一組「a」元素迭代,其中每個事件偵聽器的originReference和objArray的值發生更改。在這種情況下,在我的點擊事件中傳遞給函數的所有變量的值將是最終值的值。我需要它在迭代期間根據值進行更改。 – kittyhawk

2

您應該使用JSON.stringify到您的JavaScript對象轉換爲JSON字符串。

onclickReference.attr("onclick", "drawChart('" + originReference + "'," + JSON.stringify(stringArray) + "," + JSON.stringify(jsonArray) + "); return false;"); 

但作爲@Rocket危險品說,用onclick屬性是一個糟糕的方式做事件綁定。

相關問題