自动填充多个选择框在Internet Explorer中选择了第一个选项

时间:2012-10-05 14:26:26

标签: javascript html ajax prototypejs auto-populate

我正在使用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"并不能解决问题,因为自动选择了最后一个选项:(

2 个答案:

答案 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对此没有任何说明,所以空选项也可以正常工作(确定)。