2013-04-24 47 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

相关问题