2013-04-24 40 views
0

以下代碼將創建選擇標記。我在這裏創建選項。併爲其分配值。其實我想添加我的所有「grad_id」從數據庫中選擇下拉列表,但在JavaScript中。我想在javascript中創建選擇標記,並且想從我的數據庫添加記錄

var gradeSelect=document.createElement('Select'); 
gradeSelect.id="grade[]"; 
gradeSelect.name="grade[]"; 

var opt1=document.createElement('option'); 
opt1.value="obj"; 
opt1.textContent="obj"; 

gradeSelect.appendChild(opt1); 

論 「OBJ」 我想從數據庫中添加的ID的地方。

+0

正確的方法是從數據庫獲取ID的列表,使用AJAX('xmlHttpRequest')調出數據,或者您可以在服務器端的某處打印列表,然後獲取它。通過打印我的意思是查詢並寫入一個JSON變量的JSON,例如: RaphaelDDL 2013-04-24 12:34:55

+0

我能夠得到id列表,但我不知道如何將它分配給選項。請給我任何示例,它將真正幫助我完整。 – Kalashri 2013-04-24 12:37:00

+0

SoonDead的答案解釋我說的很清楚:) – RaphaelDDL 2013-04-24 13:04:42

回答

1

需要注意的是JavaScript的執行在客戶端的瀏覽器,所以它不能直接訪問從那裏數據庫(我假設你正在談論的服務器沒有的WebSQL,的LocalDB或某事在傳統的數據庫類似。

什麼的javascript 例如可以訪問,是DOM。例如,您可以創建元素,並將其插入到DOM(就像你在你的例子做),但你也可以訪問那些元素已經存在。

您也可以創建AJAX請求。這是一個對服務器的異步請求,您可以使用它來獲取所需的數據。

但是,您選擇訪問數據庫時,如果沒有某些服務器端代碼,您將無法管理該數據庫。看到你的問題,目前還不清楚你用什麼技術來生成你的html(PHP,ASP,JSP,Ruby等)。但是,不管你使用模式仍平常:

  1. 創建一個頁面你得到的數據。該頁面應該是XMLJSON(或非常基本情況下的HTML),並且只包含要從服務器獲取的數據。
  2. 在客戶端(javascript)上創建一個AJAX請求您在上一步中創建的頁面。通過這種方式,您可以將所需的數據轉換爲JavaScript,您可以在其中執行任何操作。
  3. 最後轉換並使用這些數據。

假設您能夠完成前兩個步驟,並且您有數據(例如)JSON。你有一個包含字符串中的JSON的變量。像這樣:

var response = '[ { "id": 1, "text": "First" }, { "id": 2, "text": "Second" } ]'; 

你不需要像這樣鍵入它,你從服務器獲得它。

該怎麼辦? Make a javascript object從它:

var responseObj = JSON.parse(response); 

這將返回一個對象,它是含有一個id和文本屬性2個對象的數組。

然後通過它去同一個循環:

var gradeSelect=document.createElement('Select'); 
gradeSelect.id="grade[]"; 
gradeSelect.name="grade[]"; 

for (var i = 0; i < responseObj.length; i++) { 
    var current = responseObj[i]; 
    var opt=document.createElement('option'); 

    opt.value = current.id; 
    opt.textContent = current.text; 

    gradeSelect.appendChild(opt); 
} 

隨意瀏覽的MDN portal身邊,你可以從中學到很多東西。

這是你在找什麼?


編輯

看你的例子中,你只想要的ID從服務器:

var response = '[ 1, 2, 3, 5, 10, 20, 1000 ]'; 
var responseObj = JSON.parse(response); // Will return a list of numbers 

然後:

var gradeSelect=document.createElement('Select'); 
gradeSelect.id="grade[]"; 
gradeSelect.name="grade[]"; 

for (var i = 0; i < responseObj.length; i++) { 
    var current = responseObj[i]; 
    var opt=document.createElement('option'); 

    opt.value = current; 
    opt.textContent = current 

    gradeSelect.appendChild(opt); 
} 

EDIT2

另一種方法是將值呈現爲原始響應。這樣就不需要額外的ajax請求。

如果我理解你的意見正確,你正在做這樣的事情:

<html> 
<head> 
    ... 
</head> 
<body> 
    ... 
    <div id="hidden_container"> 
     <input type="hidden" class="grade_id" value="1" /> 
     <input type="hidden" class="grade_id" value="2" /> 
     <input type="hidden" class="grade_id" value="3" /> 
     <input type="hidden" class="grade_id" value="4" /> 
    </div> 
</body> 
</html> 

請注意,我已經包裹與具有ID的div容器隱藏字段。這將幫助我選擇內容。

現在您需要解析這些輸入並將它們轉換爲數字數組。

var inputs = document.getElementById('hidden_container').getElementsByTagName('input'); 
var numbers = [];  

for (int i = 0; i < inputs.length; i++) { 
    numbers.push(inputs[i].value); 
} 

numbers變量是一個數組數組。如果你在上面檢查我的代碼,你可以使用這個變量代替responseObj,你就完成了。

這種方法的問題是,爲什麼你沒有首先通過php呈現選項。如果您可以渲染隱藏的字段,那麼您也可以渲染選擇選項。

+0

謝謝,現在我明白了。我使用的是PHP和JavaScript,而我的後端是mysql。 – Kalashri 2013-04-24 13:17:47

+0

嘿,我正在將我的grade_id讀取到php的hideen字段中,並將這個數組從php傳遞給javascript。我嘗試使用getElementBy Id,但我無法使用getElementBy()獲取數組。值 – Kalashri 2013-04-25 05:16:40

+0

我編輯了我的答案,我希望它有幫助。 – SoonDead 2013-04-25 06:00:07

相關問題