在 jquery 中使用变量作为占位符更新 select 选项
Updating select options using variable as placeholder in jquery
在我的项目中,一个页面可以有一个或多个 selects 选项填充数据库值,意味着 select 具有不同 id 的字段可以有相同的选项。
例如:
<select id="set-0-costID">
<option value="1">Name1</options>
<option value="2">Name2</options>
<option value="3">Name3</options>
</select>
<select id="set-1-costID">
<option value="1">Name1</options>
<option value="2">Name2</options>
<option value="3">Name3</options>
</select>
如果p.e。选项 == 1 的文本在 ID 为 "set-0-costID" 的字段中更改 我想使用 Jquery.
更新 ID 为“*costID”的所有其他字段
此代码有效:
$("[id$='costID']").each(function(index, elem){
var $el = $('#' + elem.id);
$('#' + elem.id + ' option[value="1"]').text('Name1new');
$el.selectpicker("refresh");
});
但我必须更加灵活,并希望将所有可能的字段名存储在字典中并循环遍历它。
此代码无效。没有错误,但选项没有更新。
var fields=['cost1ID', 'cost2ID']; var field_name="";
for (f in fields) {
field_name = fields[f];
$("[id$=field_name]").each(function(index, elem){
var $el = $('#' + elem.id);
$('#' + elem.id + ' option[value="1"]').text('Name1new');
$el.selectpicker("refresh");
});
};
我猜 Jquery 将 field_name 解释为要搜索的名称而不是变量。
我必须如何更改我的代码才能使其正常工作?
谢谢
我不确定这是否会解决问题,但请尝试替换:
$("[id$=field_name]").each(function(index, elem){
作者:
$("[id$='"+field_name+"']").each(function(index, elem){
希望对您有所帮助。
有点晚了,但是你考虑过数据属性吗?它可能会使您的代码在未来更加灵活。
在这里,我创建了一个名为 data-update
的属性,它列出了要更新的每个 ID(由 space 分隔):
<select id="set-0-costID" data-update="#set-1-costID #set-2-costID">
<option></option>
<option value="1">Name1</option>
<option value="2">Name2</option>
</select>
<select id="set-1-costID" data-update="#set-0-costID #set-2-costID">
<option></option>
<option value="1">Name1</option>
<option value="2">Name2</option>
</select>
<select id="set-2-costID" data-update="#set-0-costID #set-1-costID">
<option></option>
<option value="1">Name1</option>
<option value="2">Name2</option>
</select>
jQuery:
$(document).on('change', '[data-update]', function(){
var a = $(this).data('update').split(' '), index;
for (index = 0; index < a.length; ++index) {
$(a[index]).val( $(this).val() );
}
});
这也适用于 类:JSFiddle demo with classes
在我的项目中,一个页面可以有一个或多个 selects 选项填充数据库值,意味着 select 具有不同 id 的字段可以有相同的选项。
例如:
<select id="set-0-costID">
<option value="1">Name1</options>
<option value="2">Name2</options>
<option value="3">Name3</options>
</select>
<select id="set-1-costID">
<option value="1">Name1</options>
<option value="2">Name2</options>
<option value="3">Name3</options>
</select>
如果p.e。选项 == 1 的文本在 ID 为 "set-0-costID" 的字段中更改 我想使用 Jquery.
更新 ID 为“*costID”的所有其他字段此代码有效:
$("[id$='costID']").each(function(index, elem){
var $el = $('#' + elem.id);
$('#' + elem.id + ' option[value="1"]').text('Name1new');
$el.selectpicker("refresh");
});
但我必须更加灵活,并希望将所有可能的字段名存储在字典中并循环遍历它。
此代码无效。没有错误,但选项没有更新。
var fields=['cost1ID', 'cost2ID']; var field_name="";
for (f in fields) {
field_name = fields[f];
$("[id$=field_name]").each(function(index, elem){
var $el = $('#' + elem.id);
$('#' + elem.id + ' option[value="1"]').text('Name1new');
$el.selectpicker("refresh");
});
};
我猜 Jquery 将 field_name 解释为要搜索的名称而不是变量。 我必须如何更改我的代码才能使其正常工作? 谢谢
我不确定这是否会解决问题,但请尝试替换:
$("[id$=field_name]").each(function(index, elem){
作者:
$("[id$='"+field_name+"']").each(function(index, elem){
希望对您有所帮助。
有点晚了,但是你考虑过数据属性吗?它可能会使您的代码在未来更加灵活。
在这里,我创建了一个名为 data-update
的属性,它列出了要更新的每个 ID(由 space 分隔):
<select id="set-0-costID" data-update="#set-1-costID #set-2-costID">
<option></option>
<option value="1">Name1</option>
<option value="2">Name2</option>
</select>
<select id="set-1-costID" data-update="#set-0-costID #set-2-costID">
<option></option>
<option value="1">Name1</option>
<option value="2">Name2</option>
</select>
<select id="set-2-costID" data-update="#set-0-costID #set-1-costID">
<option></option>
<option value="1">Name1</option>
<option value="2">Name2</option>
</select>
jQuery:
$(document).on('change', '[data-update]', function(){
var a = $(this).data('update').split(' '), index;
for (index = 0; index < a.length; ++index) {
$(a[index]).val( $(this).val() );
}
});
这也适用于 类:JSFiddle demo with classes