2012-10-05 105 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

相關問題