我正在使用ajax with prototype:
更新多选框new Ajax.Updater(selectbox, someurl,{
method:'post',
parameters: "data=" + result,
onFailure: function(){ alert('ajax updater error'); }
});
更新程序运行良好,并使用ajax调用返回的选项更新选择框。唯一的问题是在IE中自动选择了最顶层的选项。
我试图通过添加
手动取消选择它document.getElementById(selectbox).options[0].selected = false;
在Ajax.Updater()
函数之后和onSuccess: {}
子句中,但它在复选框更新之前已初始化,所以从这里开始的唯一方法是设置延迟,但我想知道是否有另一种方式这样做?
同时向每个选项添加属性selected="false"
并不能解决问题,因为自动选择了最后一个选项:(
答案 0 :(得分:1)
尝试在选择框中取消设置选定的索引
$(selectbox).selectedIndex = -1;
答案 1 :(得分:0)
添加一个空值的第一个字段(或者您的程序理解为“不是预期域中的值”)并选择它。 HTML选择字段必须始终选择一个字段(对吗?)
编辑 w3c规范声明:
17.6.1预先选择的选项可以为用户预先选择零个或多个选项。用户代理应确定哪些选择 预先选择如下:
如果没有OPTION元素具有所选属性集,则为用户代理 选择最初选择哪个选项的行为是未定义的。 注意。由于现有的实现以不同的方式处理这种情况, 当前规范与RFC 1866([RFC1866]第8.1.3节)不同, 其中指出:初始状态选择了第一个选项,除非 SELECTED属性出现在任何元素上。以来 用户代理行为不同,作者应确保每个菜单 包括默认的预先选择的OPTION。
如果一个OPTION元素具有所选属性集,则应该是 预先选定的。
如果SELECT元素具有多个属性集 并且多个OPTION元素具有所选的属性集 应该都是预先选定的。如果超过,则认为是错误 一个OPTION元素具有选定的属性集和SELECT element没有设置multiple属性。用户代理可能有所不同 他们如何处理这个错误,但不应该预先选择多个 选择。
因此,行为必须由应用程序控制,因为默认情况下每个浏览器都可以选择不同的行为。但最终,其中一个将被选中。通常,当它定义了多个属性时,它会选择none,但是...... specs对此没有任何说明,所以空选项也可以正常工作(确定)。