2012-10-05 72 views
1

我使用Ajax和原型更新多选择框:Autopopulating多选框已在Internet Explorer中选择第一个选项

new Ajax.Updater(selectbox, someurl,{ 
    method:'post', 
    parameters: "data=" + result, 
    onFailure: function(){ alert('ajax updater error'); } 
}); 

的更新工作得很好,并选择框与由返回选项更新阿贾克斯呼吁。唯一的问题是在IE中自动选择了最上面的选项。

我试图通过把

document.getElementById(selectbox).options[0].selected = false; 

Ajax.Updater()功能之后和onSuccess: {}子句中右手动取消,但前面的复选框被更新,以便从这里的唯一办法就是设置一个延迟它被初始化但我想知道是否有另一种方法来做到这一点?

还增加属性selected="false"每一个选项不能解决问题,那么最后一个选项被选中全自动:(

+0

你尝试'的document.getElementById( '选择框')值= NULL取消设置选定的索引;'? – rgthree

+0

@rgthree它不工作 – user197483

+0

设置'selectedIndex'为-1应该可以工作 – Victor

回答

0

添加第一场空值(或东西你的程序理解为“不是值在预期域“),并选择它的HTML选择字段必须有一个字段中选择所有的时间(右)

编辑 W3C的规范指出:

17.6.1预 - 选择的选项可以为用户预先选择零个或多个选项。用户代理应该确定如下选择 预选:

如果没有OPTION元素具有所选属性集,则用户代理 选择哪个选项的行为是未定义的。 注意。由于现有实现不同地处理这种情况,当前规范不同于RFC 1866([RFC1866]第8.1.3节), 其中规定:初始状态具有第一个选项,除非 SELECTED属性存在于任何元素。由于 用户代理行为不同,作者应确保每个菜单 包含默认的预选OPTION。

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

所以,行为必须由应用程序控制,因为每个浏览器可以默认选择不同的行为。但最终,其中一个将被选中。通常,当它具有多个属性定义时,它将选择无但除外...规范没有说明这一点,所以空选项也可以工作(可以肯定)。

+0

以及多选框不需要在 – user197483

+0

内选择任何选项感谢您的帮助 – user197483

+0

祝您好运。附:尝试了一些东西,例如在IE8中,它在多重选择中不选择任何选项。你正在使用哪种浏览器? – Alfabravo

1

尝试选择框

$(selectbox).selectedIndex = -1;

+0

http://jsfiddle.net/3NvGb/ – Victor

相关问题