【发布时间】:2010-10-29 14:40:32
【问题描述】:
我有一个选择框,只有在单击时才会填充。所涉及的查询需要很长时间,因此我将其从页面上显示的标准数据中分离出来。
我已经实现了函数loadMyData(element, id),它执行ajax 请求并将数据作为JSON 返回。然后它填充选择框。
事件绑定到元素如下:
<select onclick="loadMyData(this, 1)">
</select>
选择框填充如下:
$.each(data, function(index, optionData) {
select.options[element.options.length]
= new Option(optionData.Text, optionData.Value);
});
在基于 Gecko 的浏览器上有效,但在 Webkit 浏览器(safari 和 chrome)上,当我单击选择框时,在 ajax 请求之前和响应之后显示一个空的下拉框,下拉框是没有刷新。必须在选择框外单击并再次单击它才能看到更新的“选项”。
有没有办法强制它刷新内容?还是简单地自动选择第一个并隐藏下拉框?
**尝试 onfocus 并发现相同的结果。 onmouseover 有效,但“不可用”。 onchange 不可行,因为选择框在其初始状态下是空的。*
【问题讨论】:
-
你有没有考虑过对这个使用同步请求?这可能会消除任何时间滞后,并让选择框有机会正确更新!另外,为什么要基于 onclick 加载?是否可以在到达下拉列表之前根据用户与其他 UI 元素的交互来执行更新?如果选择不依赖于任何其他 UI 选择,为什么不预先填充它?
-
或者作为事后的想法......为什么不在 DOM Ready 上触发加载功能,尽管处于异步模式?这样,初始页面会立即加载,而无需执行长查询,并且浏览器不会死机……当用户准备好使用 UI 元素时,选择框已被静默填充!
标签: jquery ajax select webkit onclick