jQuery .append 与三元 `:?` 运算符的错误?
jQuery bug in .append with ternary `:?` operators?
使用
var states = {
Abbreviation: "AR",
Name: "Arkansas"
}
为什么会这样。
$.each(states, function () {
var o = {
value: this.Abbreviation,
text: this.Name
}
if (this.Abbreviation === "AR") { //hardcoded for you pleasure
o.selected = 'selected';
}
e.append(
$('<option/>', o)
);
});
但不是这个:
$.each(states, function () {
e.append(
$('<option/>', {
value: this.Abbreviation,
text: this.Name,
selected: (this.Abbreviation === csc.statesDDL.txt().val() ? 'selected' : '')
})
);
});
对于三元 :?
运算符,jquery 中的 .append 是否有限制?
注意:我记录了 if 语句的输出,当 运行 注释掉的代码显示所有选项都被选中时,日志输出只有 1 个选项 = true。未提交的输出代码,按预期运行。
我猜它没有评估它
((this.Abbreviation === csc.statesDDL.txt().val()) ? 'selected' : '')
但评估为
(this.Abbreviation === (csc.statesDDL.txt().val() ? 'selected' : ''))
问题不在于三元,似乎是 jQuery/HTML
处理空字符串的方式。 jQuery
很可能不会将 属性 解析为明确的 false,从而创建一个带有 "selected=''"
的元素,浏览器可能只是将其解释为 "selected"
我认为来自一个旧的 HTML
标准,承认它被选中。如果你将 false 明确化,它将起作用:
selected: (this.Abbreviation === csc.statesDDL.txt().val() ? 'selected' : false)
使用
var states = {
Abbreviation: "AR",
Name: "Arkansas"
}
为什么会这样。
$.each(states, function () {
var o = {
value: this.Abbreviation,
text: this.Name
}
if (this.Abbreviation === "AR") { //hardcoded for you pleasure
o.selected = 'selected';
}
e.append(
$('<option/>', o)
);
});
但不是这个:
$.each(states, function () {
e.append(
$('<option/>', {
value: this.Abbreviation,
text: this.Name,
selected: (this.Abbreviation === csc.statesDDL.txt().val() ? 'selected' : '')
})
);
});
对于三元 :?
运算符,jquery 中的 .append 是否有限制?
注意:我记录了 if 语句的输出,当 运行 注释掉的代码显示所有选项都被选中时,日志输出只有 1 个选项 = true。未提交的输出代码,按预期运行。
我猜它没有评估它
((this.Abbreviation === csc.statesDDL.txt().val()) ? 'selected' : '')
但评估为
(this.Abbreviation === (csc.statesDDL.txt().val() ? 'selected' : ''))
问题不在于三元,似乎是 jQuery/HTML
处理空字符串的方式。 jQuery
很可能不会将 属性 解析为明确的 false,从而创建一个带有 "selected=''"
的元素,浏览器可能只是将其解释为 "selected"
我认为来自一个旧的 HTML
标准,承认它被选中。如果你将 false 明确化,它将起作用:
selected: (this.Abbreviation === csc.statesDDL.txt().val() ? 'selected' : false)