在 jquery 中附加选项以选择的麻烦
Troubles appending options to select in jquery
我有一些<select>
需要填充来自数组的动态值。 我的代码非常简单,HTML是由一些具有相同类(.js-select
)的空HTML <select>
创建的。
JS非常简单:
var $select = $(".js-select");
var ioSensors = [1,2,3]; // The data I want to display in the select
var $optionTpl = $("<option></option>");
for( i=0 ; i<ioSensors.length ; i++ ){
//also show a leading "None" option
if(i === 0){
$optionTpl.attr('value','').text('None').appendTo($select);
}
$optionTpl.attr('value', ioSensors[i]-1).text(ioSensors[i]).appendTo($select);
}
使用此代码,我正确更新了所有<select>
,但最后一个仅填充了数组的最后一个值,甚至没有显示"无"选项。
谁能帮助我了解问题出在哪里以及为什么它表现得那样?谢谢!
我在这里做了一支笔
var $optionTpl = $("<option></option>");
创建一个元素一次,然后在循环中,您只需继续移动相同的元素并给它一个新值。
改为在循环中创建多个元素
var $select = $(".js-select");
var ioSensors = [1,2,3];
for( var i = 0; i < ioSensors.length; i++ ){
var $optionTpl = $("<option></option>");
if(i === 0){
$optionTpl.val('').text('None').appendTo($select);
}
$optionTpl.val(ioSensors[i]-1).text(ioSensors[i]).appendTo($select);
}
正如其他人已经建议的那样,它不起作用的原因是因为你创建了一个元素并不断移动它。在循环内移动元素的创建,例如:
var $select = $(".js-select");
var ioSensors = [1,2,3]; // The data I want to display in the select
for( i=0 ; i<ioSensors.length ; i++ ){
//also show a leading "None" option
if(i === 0){
$("<option></option>").attr('value','').text('None').appendTo($select);
}
$("<option></option>").attr('value', ioSensors[i]-1).text(ioSensors[i]).appendTo($select);
}
如果你想知道为什么你的代码似乎适用于最后一个旁边的所有<select>
,根据文档,当追加的目标有多个元素时,jquery 将为第一个 N-1 个目标克隆元素,然后只移动最后一个元素:
如果以这种方式选择的元素插入到单个元素中在DOM的其他地方的位置,它将被移动到目标(未克隆):
。
重要提示:但是,如果有多个目标元素,将为每个元素创建插入元素的克隆副本目标,除了最后一个。
您需要克隆元素才能拥有多个元素
var $select = $(".js-select");
var ioSensors = [1, 2, 3]; // The data I want to display in the select
var $optionTpl = $("<option></option>");
for (i = 0; i < ioSensors.length; i++) {
//also show a leading "None" option
if (i === 0) {
$optionTpl.clone().val('').text('None').appendTo($select);
}
$optionTpl.clone().val(ioSensors[i] - 1).text(ioSensors[i]).appendTo($select);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="js-select"></select>
你也可以写同样像
var $select = $(".js-select");
var ioSensors = [1, 2, 3]; // The data I want to display in the select
var $optionTpl = $("<option></option>");
$("<option />", {
value: '',
text: 'None'
}).appendTo($select);
ioSensors.forEach(function(item) {
$("<option />", {
value: item - 1,
text: item
}).appendTo($select);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="js-select"></select>
这是一个简单的解决方案(解决方案的笔):
var ioSensors = [1,2,3];
$(".js-select").each(function(){
for(var i=0;i<ioSensors.length;i++) {
if(i === 0){
$("<option value='"'">None</option>").appendTo($(this));
}
$("<option value='"" + ioSensors[i] + "'">" + ioSensors[i] + "</option>").appendTo($(this));
}
});
相关文章:
- 下拉选择可自动更改第二个下拉选择
- 如何使用jQuery选择下拉列表的值
- jquery点击函数select&取消选择
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 按照选项卡索引的顺序循环一个jQuery选择
- 在动态创建的元素上获取对特定选择器的引用
- AngularJS-在JSON选择器中使用变量名
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 获取选择框的状态
- d3基于用户选择动态更新节点
- 提交后保留下拉选择的值
- JQuery对动态创建的对象进行选择
- 无法在Ionic select中预先选择最后一个选项
- 使用CSS或js,使用动态选择器选择任意li的下一个元素
- jQuery自动完成阻止选择后聚焦
- 使用此选项选择父类内部的类
- jQuery最近父级的数据属性选择器
- 在 jquery 中附加选项以选择的麻烦
- 使用jQuery按值选择我的麻烦输入
- Javascript -在选择id时遇到麻烦