【发布时间】:2012-02-19 21:27:13
【问题描述】:
使用 jQuery,我正在尝试更改 SELECT 元素中的选定选项以匹配另一个输入值:
$('#mySelect')
.find('option')
.filter(function() {
return this.text == $('#selectedRejectReason').val();
}).attr('selected', true)
当页面呈现并且这个 JS 运行时,我可以在 Safari 的网络检查器中看到它正在更新 DOM:
<select>
<option value="label">Select Reason</option>
<option value="Wrong Amount" selected="true">Wrong Amount</option>
<option value="Wrong Time">Wrong Time</option>
<option value="Wrong Place">Wrong Place</option>
</select>
当页面加载时,默认情况下,没有任何 OPTIONS 具有 SELECTED 属性...所以第一个项目正在显示。 jQuery 触发,DOM 被更新,所以它看起来像上面那样,但在 Safari 中,它仍然在页面上显示“SELECT REASON”。这在 Firefox 中运行良好。
任何想法为什么?看起来像一个 Safari 错误。唉,它在 iPhone 上破坏了我们的网站。
在进行一些搜索时,有些人似乎通过从 jQuery 1.6 升级到 1.7 来解决这个问题。唉,我现在没有那种奢侈。但是,如果这是解决方法,那么任何人都知道解决此问题的更改是什么?
【问题讨论】:
-
如果你使用 jQuery 1.6 或更高版本,你应该使用
.prop而不是.attr。 -
@Joseph 请回答这个问题,这样我就可以给你信用了!我不知道为什么会修复它,但确实如此。查看 DOM,标记是相同的,但使用 PROP 至少会更新视觉效果。