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 事前に選択されたオプション 0 個以上の選択肢がユーザーのために事前に選択されている場合があります。ユーザー エージェントは、次のように事前に選択されている選択肢を決定する必要があります。

OPTION 要素に selected 属性が設定されていない場合、最初に選択するオプションを選択するためのユーザー エージェントの動作は未定義です。ノート。既存の実装ではこのケースの扱いが異なるため、現在の仕様は RFC 1866 ([RFC1866] セクション 8.1.3) とは異なります。RFC 1866 には次のように記載されています。 SELECTED 属性がいずれかの要素に存在しない限り、初期状態では最初のオプションが選択されています。ユーザー エージェントの動作は異なるため、作成者は、各メニューに事前に選択されたデフォルトの OPTION が含まれていることを確認する必要があります。

1 つの OPTION 要素に selected 属性が設定されている場合は、事前に選択する必要があります。
SELECT 要素に multiple 属性セットがあり、複数の OPTION 要素に selected 属性セットがある場合、それらはすべて事前に選択されている必要があります。複数の OPTION 要素に selected 属性セットがあり、SELECT 要素に multiple 属性セットがない場合、エラーと見なされます。ユーザー エージェントは、このエラーの処理方法が異なる場合がありますが、複数の選択肢を事前に選択するべきではありません。

したがって、各ブラウザはデフォルトで異なるブラウザを選択できるため、動作はアプリケーションで制御する必要があります。しかし、最終的にはどちらかが選ばれます。通常、複数の属性が定義されている場合、何も選択しませんが...仕様にはそれについて何も記載されていないため、空のオプションも同様に機能します(確かに)。

于 2012-10-05T14:36:58.357 に答える