Javascript h二维数组:第一列是项目i,添加到的innerHTML。第二列是记录id i,添加到的值中:
PHPJavascript h二维数组:第一列是项目i,添加到的innerHTML。第二列是记录id i,添加到的值中:,javascript,jquery,html-select,Javascript,Jquery,Html Select,PHP $items = $dal->get_new_items(); // Gets data from the database $items_arr = array(); $i = 0; foreach ($items as $item) { $first_name = $item->first_name; $last_name = $item->last_name; $date = $item->date; $show = $fir
$items = $dal->get_new_items(); // Gets data from the database
$items_arr = array();
$i = 0;
foreach ($items as $item)
{
$first_name = $item->first_name;
$last_name = $item->last_name;
$date = $item->date;
$show = $first_name . " " . $last_name . ", " . $date;
$request_id = $request->request_id;
$items_arr[0][$i] = $show;
$items_arr[1][$i] = $request_id;
$i++;
}
echo json_encode($items_arr);
function ddl_items() {
if (window.XMLHttpRequest) {
// Code for Internet Explorer 7+, Firefox, Chrome, Opera, and Safari
xmlhttp=new XMLHttpRequest();
}
else{
// Code for Internet Explorer 6 and Internet Explorer 5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
var arr = JSON.parse(xmlhttp.responseText);
var lstbx = document.getElementById('my_listbox');
for (var i=0; i<arr.length; i++) {
var option = new Option(arr[0][i], arr[1][i]);
lstbx.options.add(option);
}
}
};
xmlhttp.open("GET", "Code/get_items.php?dummy_time=" + new Date().getTime() + "", true);
xmlhttp.send();
}
}
函数ddl_项(){
if(window.XMLHttpRequest){
//Internet Explorer 7+、Firefox、Chrome、Opera和Safari的代码
xmlhttp=新的XMLHttpRequest();
}
否则{
//Internet Explorer 6和Internet Explorer 5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
var arr=JSON.parse(xmlhttp.responseText);
var lstbx=document.getElementById('my_listbox');
对于(var i=0;i,Chrome(jQuery 1.7.1)中的这种解决方案存在排序问题(Chrome按名称/编号对对象属性排序?)
所以为了保持秩序(是的,这是对象滥用),我改变了这一点:
optionValues0 = {"4321": "option 1", "1234": "option 2"};
对此
optionValues0 = {"1": {id: "4321", value: "option 1"}, "2": {id: "1234", value: "option 2"}};
然后,$。每个将看起来像:
$.each(optionValues0, function(order, object) {
key = object.id;
value = object.value;
$('#mySelect').append($('<option>', { value : key }).text(value));
});
$。每个(选项值0,函数(顺序,对象){
key=object.id;
value=object.value;
$('#mySelect').append($('',{value:key}).text(value));
});
尽管前面的答案都是有效答案,但建议先将所有这些内容附加到documentFragmnet,然后将该文档片段作为元素附加到
看
大致如下:
var frag = document.createDocumentFragment();
for(item in data.Events)
{
var option = document.createElement("option");
option.setAttribute("value", data.Events[item].Key);
option.innerText = data.Events[item].Value;
frag.appendChild(option);
}
eventDrop.empty();
eventDrop.append(frag);
对旧版本的改进:
看来普通的.append也能像预期的那样工作
$("#mySelect").append(
$.map(selectValues, function(v,k){
return $("<option>").val(k).text(v);
})
);
$(“#mySelect”).append(
$.map(选择值,函数(v,k){
返回$(“”).val(k).text(v);
})
);
或者更短
$("#mySelect").append(
$.map(selectValues, (v,k) => $("<option>").val(k).text(v))
// $.map(selectValues, (v,k) => new Option(v, k)) // using plain JS
);
$(“#mySelect”).append(
$.map(selectValues,(v,k)=>$(“”).val(k).text(v))
//$.map(selectValues,(v,k)=>newoption(v,k))//使用纯JS
);
还有另一种方法:
var options = [];
$.each(selectValues, function(key, value) {
options.push($("<option/>", {
value: key,
text: value
}));
});
$('#mySelect').append(options);
var选项=[];
$.each(选择值、函数(键、值){
选项。推送($(“”){
值:键,
文本:值
}));
});
$('#mySelect')。附加(选项);
如果(data.length!=0){
var opts=“”;
对于(数据中的i)
选项+=“”+数据[i][text]+“”;
$(“#myselect”).empty().append(opts);
}
在第一次构建一个巨大的字符串后,这只会对DOM进行一次操作。所有这些答案似乎都非常复杂。您只需要:
var options = $('#mySelect').get(0).options;
$.each(selectValues, function(key, value) {
options[options.length] = new Option(value, key);
});
这是完全跨浏览器兼容的
$。对于循环,每个都比慢
每次,DOM选择都不是循环$(“#mySelect”).append();
因此,最好的解决方案如下
如果JSON数据resp
为
[
{"id":"0001", "name":"Mr. P"},
{"id":"0003", "name":"Mr. Q"},
{"id":"0054", "name":"Mr. R"},
{"id":"0061", "name":"Mr. S"}
]
把它当作
var option = "";
for (i=0; i<resp.length; i++) {
option += "<option value='" + resp[i].id + "'>" + resp[i].name + "</option>";
}
$('#mySelect').html(option);
var选项=”;
对于(i=0;i我将两个最好的答案组合成一个很好的答案
var outputConcatenation = [];
$.each(selectValues, function(i, item) {
outputConcatenation.push($("<option></option>").attr("value", item.key).attr("data-customdata", item.customdata).text(item.text).prop("outerHTML"));
});
$("#myselect").html(outputConcatenation.join(''));
var outputConcatenation=[];
$.each(selectValues,function(i,item){
outputConcatenation.push($(“”).attr(“value”,item.key).attr(“data customdata”,item.customdata).text(item.text).prop(“outerHTML”);
});
$(“#myselect”).html(outputConcatenation.join(“”));
与其到处重复相同的代码,不如编写自己的jQuery函数,如:
jQuery.fn.addOption = function (key, value) {
$(this).append($('<option>', { value: key }).text(value));
};
JSON格式:
[{
"org_name": "Asset Management"
}, {
"org_name": "Debt Equity Foreign services"
}, {
"org_name": "Credit Services"
}]
以及用于将值填充到Ajax success下拉列表的jQuery代码:
success: function(json) {
var options = [];
$('#org_category').html(''); // Set the Dropdown as Blank before new Data
options.push('<option>-- Select Category --</option>');
$.each(JSON.parse(json), function(i, item) {
options.push($('<option/>',
{
value: item.org_name, text: item.org_name
}));
});
$('#org_category').append(options); // Set the Values to Dropdown
}
success:function(json){
var期权=[];
$('#org_category').html('')//在新数据之前将下拉列表设置为空白
options.push('--Select Category--');
$.each(JSON.parse(JSON)),函数(i,项){
选项。推送($(''),
{
值:item.org\u名称,文本:item.org\u名称
}));
});
$(“#org_category”).append(options);//将值设置为下拉列表
}
使用$.map()函数,您可以以更优雅的方式执行此操作:
$('#mySelect').html( $.map(selectValues, function(val, key){
return '<option value="' + val + '">'+ key + '</option>';
}).join(''));
$('#mySelect').html($.map(selectValues,function(val,key){
返回“”+键+“”;
}).加入(“”);
$。每个(选择值、函数(键、值){
$('#mySelect')。附加($(“”{
值:键,文本:值
}));
});
使用jquery追加selectbox
函数setprice(){
var selectValues={“1”:“测试1”,“2”:“测试2”};
$.each(选择值,函数(键,值){
$(“#我的选择”)
.append($(“”)
.attr(“值”,键)
.文本(值));
});
}
1.
2.
3.
4.
You方法显然比上面的“正确”答案更快,因为它使用的jQuery也更少在Chrome和FF3.x中工作,但在IE7中就我所知,如果键有一些引号或>,并且如果我有两个不想丢失的选项,则会中断。如何将这些新选项值附加到现有选项值上?一个小的改进是使用连接而不是加号进行连接,如:output.push('',value'');可能有帮助:(在我偶然发现这个问题后,这对我是一个帮助)上面列出的清理版本只在Jquery 1.4+中有效。对于旧版本,使用matdumsa的答案中的版本{value:key}应该是{“value”:key},如matdumsa的答案中所示。我不这么认为,因为value
是一个字符串(并且是硬编码的)它不需要被引用,而应该是标题"使用jQuery向JSON对象添加选项的最佳方法是什么?以前从未听说过选项
对象。这是所有浏览器都内置的吗?我尝试使用新选项
,但发现它在IE6和7中不起作用。我不知道为什么,但许多完整的jQuery选项都起作用。添加选择的好方法。newoption('display',value,true)
@Mark0978实际上这是newoption('display',value,true,true)
()@CarlHörberg对我来说非常有效-非常简单
$('mySelect').append($.map(selectValues, (k, v) => new Option(k, v)))
const newoption = (...args) => new Option(...args)
$('mySelect').append($.map(selectValues, newoption))
$.fn.append.apply($('mySelect'), $.map(selectValues, (k, v) => $("<option/>").val(k).text(v)));
$('mySelect').append($.map(selectValues, (k, v) => $("<option/>").val(k).text(v)))
var list = $("#selectList");
$.each(items, function(index, item) {
list.append(new Option(item.text, item.value));
});
var list = document.getElementById("selectList");
for(var i in items) {
list.add(new Option(items[i].text, items[i].value));
}
var options;
$.each(data, function(index, object) {
options += '<option value="' + object.id + '">' + object.stop + '</option>';
});
$('#selectMenu').html(options);
for (var i = 0; i < array.length; i++) {
$('#clientsList').append($("<option></option>").text(array[i].ClientName).val(array[i].ID));
};
$items = $dal->get_new_items(); // Gets data from the database
$items_arr = array();
$i = 0;
foreach ($items as $item)
{
$first_name = $item->first_name;
$last_name = $item->last_name;
$date = $item->date;
$show = $first_name . " " . $last_name . ", " . $date;
$request_id = $request->request_id;
$items_arr[0][$i] = $show;
$items_arr[1][$i] = $request_id;
$i++;
}
echo json_encode($items_arr);
function ddl_items() {
if (window.XMLHttpRequest) {
// Code for Internet Explorer 7+, Firefox, Chrome, Opera, and Safari
xmlhttp=new XMLHttpRequest();
}
else{
// Code for Internet Explorer 6 and Internet Explorer 5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
var arr = JSON.parse(xmlhttp.responseText);
var lstbx = document.getElementById('my_listbox');
for (var i=0; i<arr.length; i++) {
var option = new Option(arr[0][i], arr[1][i]);
lstbx.options.add(option);
}
}
};
xmlhttp.open("GET", "Code/get_items.php?dummy_time=" + new Date().getTime() + "", true);
xmlhttp.send();
}
}
optionValues0 = {"4321": "option 1", "1234": "option 2"};
optionValues0 = {"1": {id: "4321", value: "option 1"}, "2": {id: "1234", value: "option 2"}};
$.each(optionValues0, function(order, object) {
key = object.id;
value = object.value;
$('#mySelect').append($('<option>', { value : key }).text(value));
});
var frag = document.createDocumentFragment();
for(item in data.Events)
{
var option = document.createElement("option");
option.setAttribute("value", data.Events[item].Key);
option.innerText = data.Events[item].Value;
frag.appendChild(option);
}
eventDrop.empty();
eventDrop.append(frag);
$("#mySelect").append(
$.map(selectValues, function(v,k){
return $("<option>").val(k).text(v);
})
);
$("#mySelect").append(
$.map(selectValues, (v,k) => $("<option>").val(k).text(v))
// $.map(selectValues, (v,k) => new Option(v, k)) // using plain JS
);
var options = [];
$.each(selectValues, function(key, value) {
options.push($("<option/>", {
value: key,
text: value
}));
});
$('#mySelect').append(options);
if (data.length != 0) {
var opts = "";
for (i in data)
opts += "<option value='"+data[i][value]+"'>"+data[i][text]+"</option>";
$("#myselect").empty().append(opts);
}
var options = $('#mySelect').get(0).options;
$.each(selectValues, function(key, value) {
options[options.length] = new Option(value, key);
});
[
{"id":"0001", "name":"Mr. P"},
{"id":"0003", "name":"Mr. Q"},
{"id":"0054", "name":"Mr. R"},
{"id":"0061", "name":"Mr. S"}
]
var option = "";
for (i=0; i<resp.length; i++) {
option += "<option value='" + resp[i].id + "'>" + resp[i].name + "</option>";
}
$('#mySelect').html(option);
var outputConcatenation = [];
$.each(selectValues, function(i, item) {
outputConcatenation.push($("<option></option>").attr("value", item.key).attr("data-customdata", item.customdata).text(item.text).prop("outerHTML"));
});
$("#myselect").html(outputConcatenation.join(''));
jQuery.fn.addOption = function (key, value) {
$(this).append($('<option>', { value: key }).text(value));
};
$('select').addOption('0', 'None');
[{
"org_name": "Asset Management"
}, {
"org_name": "Debt Equity Foreign services"
}, {
"org_name": "Credit Services"
}]
success: function(json) {
var options = [];
$('#org_category').html(''); // Set the Dropdown as Blank before new Data
options.push('<option>-- Select Category --</option>');
$.each(JSON.parse(json), function(i, item) {
options.push($('<option/>',
{
value: item.org_name, text: item.org_name
}));
});
$('#org_category').append(options); // Set the Values to Dropdown
}
$('#mySelect').html( $.map(selectValues, function(val, key){
return '<option value="' + val + '">'+ key + '</option>';
}).join(''));
$.each(selectValues, function(key, value) {
$('#mySelect').append($("<option/>", {
value: key, text: value
}));
});
<!DOCTYPE html>
<html lang="en">
<head>
<title>append selectbox using jquery</title>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
function setprice(){
var selectValues = { "1": "test 1", "2": "test 2" };
$.each(selectValues, function(key, value) {
$('#mySelect')
.append($("<option></option>")
.attr("value",key)
.text(value));
});
}
</script>
</head>
<body onload="setprice();">
<select class="form-control" id="mySelect">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
</body>
</html>