2014-04-28 29 views
1

我使用JavaScript的創建html元素的參數的JavaScript功能:調用具有從HTML

html_info += '<div class="row"><h4>'+ i +'. Patient: '+ key +'</h4>Date of birth: '+info[0]+'<br> Occupation: '+info[1]+'<br> Date of Test: ' + info[2]+ '<script type="text/javascript"> draw_chart(' + patient_test_info[key].right_eye +'); </script></div>'; 

document.getElementById('patient_display').innerHTML += html_info; 

它正確地創建的元素和顯示存儲在info陣列中的信息,但打電話到draw_chart()函數失敗。在將它作爲參數傳遞之前,我使用console.log打印了patient_test_info[key].right_eye的內容,並且變量的內容都很好。但檢查html元素顯示patient_test_info[key].right_eye未正確傳遞,只是空對象。

<script type="text/javascript"> draw_chart([object Object],[object Object],[object Object],[object Object]); </script> 

我draw_chart()函數必須繪製在圖表中同一div作爲用於顯示內容info所述一個。在獨立調用它時,它不會識別新創建的div,因此不會顯示任何內容。

function draw_chart(data) { 

    var chart = d3.cloudshapes.barChart() 
     .width(800).height(800); 

    for(var i=0; i<data.length; i++) { 
     var temp_value = data[i]; 
     d3.select("#row") 
      .datum(temp_value) 
      .call(chart); 
    } 
} 

什麼是使用參數調用函數的正確方法?

+4

不能像這樣傳遞對象,當使用字符串協調對象時,對象也會變成字符串,並且對象的字符串表示形式爲'[object Object]'。 問題是,爲什麼你插入一個腳本標籤,立即調用一個函數,爲什麼不直接調用函數呢? – adeneo

+0

@adeneo我試過了,'html_info + = \t'

'+ i +'. Patient: '+ key +'

Date of birth: '+info[0]+'
Occupation: '+info[1]+'
Date of Test: ' + info[2]; draw_chart(patient_test_info[key].right_eye) +'
';',但它再次顯示一個空字符串。 – user2398101

+0

你沒有得到它,爲什麼你在字符串中包含函數,你已經在執行javascript,爲什麼不直接調用函數,爲什麼你必須插入到DOM然後調用它,當你可以稱呼它的方式 – adeneo

回答

1

什麼adeneo要說的是,如果你直接調用該函數它應該工作,像這樣:

html_info += '<div class="row"><h4>'+ i +'. Patient: '+ key +'</h4>Date of birth: '+info[0]+'<br> Occupation: '+info[1]+'<br> Date of Test: ' + info[2] + draw_chart(patient_test_info[key].right_eye) + '</div>'; 

在回答您的意見,我不知道該怎麼圖表代碼,您正在使用的作品,但如果d3.select("#row")應該是針對您創建的div,那麼您有3個問題:

1)您在div實際添加到DOM之前調用該函數。你需要先做html_info += '<div class="row">...'....innerHTML += html_info;,然後然後之後調用draw_chart()。

2)您的目標是<div class="row">select("#row") - 假設標準語法,#表示一個ID,而不是一個類。您需要製作它id="row"select(".row")(點表示一個類)。但是,如果您打算可以多次調用此函數來添加多個圖表,則需要它們具有唯一的名稱,否則在指定要使用最新的行時會遇到問題。我建議使用該ID並添加您的「密鑰」,假設它是有效的。

3)同樣,我不確定圖表代碼是如何工作的,但我猜想它會替換目標div的內容,而不是追加到它,這意味着您將失去標題你的排。如果是這樣的話,我建議在你的row div中放入另一個div,然後給它起一個名字,以便你可以定位它,例如'<div><h4>'+ i +'. Patient: '+ key +'</h4>Date of birth: '+info[0]+'<br> Occupation: '+info[1]+'<br> Date of Test: ' + info[2] + '<div id="chart-' + key + '"></div></div>'。一旦將其添加到innerHTML中,就可以調用draw_chart(patient_test_info[key].right_eye, key)並修改draw_chart方法以使用該名稱的關鍵字,例如, d3.select("#chart-" + key)

+0

這種格式不起作用,它只是在最後一個'info [2]'實例旁邊顯示'undefined'。我編輯了這個問題,你能否就這方面提出任何建議。 – user2398101

+0

好的,我認爲我現在更瞭解這個問題,我已經編輯了我的答案。如果這不起作用,我們可能需要看到更多的代碼才能提供幫助 - 即足夠的代碼,我們可以爲自己嘗試並檢查問題。 – Niall

+0

這是你提到的第三個錯誤,我的draw_chart()取代了div的內容而不是附加到它。非常感謝 :) – user2398101