1

我正在使用带有原型的 ajax 更新多选框:

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"到每个选项也不能解决问题,因为最后一个选项会被自动选择:(

4

2 回答 2

1

尝试取消设置选择框上的选定索引

$(selectbox).selectedIndex = -1;

于 2012-10-06T06:47:50.393 回答
0

添加具有空值的第一个字段(或您的程序理解为“不是预期域中的值”)并选择它。HTML 选择字段必须始终选择一个字段(对吗?)

编辑w3c 规范指出:

17.6.1 预选选项 可以为用户预选零个或多个选项。用户代理应该确定哪些选项是预先选择的,如下所示:

如果没有 OPTION 元素具有 selected 属性集,则用于选择最初选择哪个选项的用户代理行为是未定义的。笔记。由于现有实现对这种情况的处理方式不同,因此当前规范与 RFC 1866([RFC1866] 第 8.1.3 节)不同,后者指出:初始状态选择第一个选项,除非任何元素上存在 SELECTED 属性。由于用户代理行为不同,作者应确保每个菜单都包含一个默认的预选选项。

如果一个 OPTION 元素具有选定的属性集,则应预先选择它。
如果 SELECT 元素具有多个属性集,并且多个 OPTION 元素具有选定属性集,则它们都应该被预先选择。如果多个 OPTION 元素具有选定的属性集并且 SELECT 元素没有多个属性集,则认为是错误。用户代理处理此错误的方式可能会有所不同,但不应预先选择多个选项。

因此,行为必须由应用程序控制,因为默认情况下每个浏览器都可以选择不同的浏览器。但最终,将选择其中之一。通常,当它定义了多个属性时,它会选择 none 但是...规范对此没有任何说明,因此空选项也可以正常工作(可以肯定)。

于 2012-10-05T14:36:58.357 回答