选择不适用于动态创建的选择图元.总是选择最后一个选项
Select not working for dynamically created Select Elements. Always selecting last option.
下面的代码是我创建动态选择元素的地方。该控件显示在浏览器上,没有任何问题。但是,我选择的选项不是屏幕上选择的选项。屏幕总是显示最后一项。
奇怪的是,如果我查看源代码,"select"属性就在我选择的选项上。但是,最后一个选项正在显示。
我尝试使用.attr("selected",value===selectOption.SelectedValue),但这甚至没有在option元素上添加"selected"属性。
唯一可行的是在将Select Element附加到我的div标记(commonSubjectivesWindow)之后选择值。但这对我来说似乎很不礼貌。
我在谷歌上搜索这个问题好几个小时了。任何建议都会很有帮助。
function createSelectElement(commonSubjective, selectOption) {
var name = "select" + commonSubjective.Id;
var selectElement = $("<select>").attr("name", name);
//Tried, does not work
//$.each(selectOption.Options, function (key, value) {
// selectElement.append($("<option>").val(value).text(value).prop("selected", value === selectOption.SelectedValue));
//});
$.each(selectOption.Options, function (key, value) {
selectElement.append($("<option>").val(value).text(value).attr("selected", value === selectOption.SelectedValue));
});
return selectElement;
}
function formatCommonSubjectiveText(commonSubjective) {
if (commonSubjective.SelectOptions.length > 0) {
var i = 0;
$.each(commonSubjective.SelectOptions, function() {
var selectElement = createSelectElement(commonSubjective, this);
var placeHolder = "{" + i + "}";
commonSubjective.Text = commonSubjective.Text.replace(placeHolder, selectElement.prop("outerHTML"));
i++;
});
}
return commonSubjective.Text;
}
function loadCommonSubjectives() {
var commonSubjectivesJson = JSON.parse($("#commonSubjectivesHidden").val());
$.each(commonSubjectivesJson, function () {
$("#commonSubjectivesWindow").append($("<span>").append(formatCommonSubjectiveText(this)).prepend(
$("<input>").attr("name", "CommonSubjectivities").attr("type", "checkbox").val(this.Id).prop("checked", this.IsSelected)
).after("</br></br>"));
});
}
奇怪,刚刚做了一把小提琴。。。动态添加了一个选择框(仅一个)并选择了一个项目。。。即使在设置值之后附加。
在这里摆弄
只需设置值:
selectElement.val('val2');
来自jquery文档
val()允许您传递一个元素值数组。这很有用在处理包含元素的jQuery对象时.
我不能100%确定你想要什么,所以我会简化答案,然后你告诉我这是不是你的意思。
我的理解:
- 动态创建
<select>
- 将
selected
属性添加到<option>
时出现问题
好吧,对于这个例子,我使用的是纯JS,它可以很容易地适应jQuery。最大的挑战是记住哪些对象是普通对象,哪些是jQuery对象。
function makeSelect(ele, len, att) {
var sel = document.createElement("select");
var tgt = document.querySelector(ele);
sel.id = "selectList";
tgt.appendChild(sel);
for (var i = 1; i < len + 1; i++) {
var opt = document.createElement("option");
opt.text = i;
opt.value = i;
sel.appendChild(opt);
}
sel.selectedIndex = att - 1;
}
makeSelect('#set', 10, 5);
body {
background: #111;
}
#set {
border-radius: 8px;
width: 5em;
background: #222;
border: 2px inset #FC3;
}
legend {
font: small-caps 400 21px/1.5 "Palatino Linotype";
color: #FC3
}
<fieldset id="set">
<legend>DynSelect</legend>
</fieldset>
使用makeSelect(ele, len, att)
ele
:<select>
将附加到的元素的选择器。(即选择器-#id,.class,tag)len
:选项数att
:所选选项的索引
这篇文章关于你的问题的核心可以概括为:
使用.selectedIndex
请原谅我使用W3School参考,MDN没有列出它。如果有人找到了更好的推荐信,请在评论中通知我。
相关文章:
- 无法在Ionic select中预先选择最后一个选项
- 推特引导滚动间谍总是选择最后一个元素
- 选择页面上具有特定类的最后一个元素
- 选择表中的最后一个元素
- jQuery - 选择具有相同 ID 的组的最后一个元素
- Knockout JS单选按钮如果所有值都为true,则选择最后一个按钮
- 通过鼠标向下选择父级中的最后一个子项
- jQuery slice() 方法 在 html 中选择元素(第一个/最后一个)
- 如何在 Jquery/Javascript 中选择预定义选择的第一个和最后一个元素而不循环
- 每当我在 jquery UI 日期选择器中更改月份/年份时,如何获取该月的第一个日期和最后一个日期
- 默认情况下,在 angularjs 中选择下拉列表中的最后一个位置显示占位符
- 从iPhone的多选框中取消选择最后一个选项
- jQuery:隐藏按钮,直到选择最后一个下拉列表
- 从下拉列表中选择最后一个值,然后对其他下拉列表禁用它
- 选择不适用于动态创建的选择图元.总是选择最后一个选项
- 我有DIV和它的子DIV,我想用jQuery选择最后一个DIV.父DIVS具有id
- 选择最后一个单词或“可满足内容”的特定范围
- 如何在下拉列表中选择最后一个索引值
- jQuery each()只选择最后一个值
- 如何使用last()选择最后一个元素,而不需要遍历子元素