2

jquery を使用して、最初は空白のselect要素を作成しました。私はこれを試しました:

$('<select><option>1<option>2</select>').prop('selectedIndex', -1).appendTo(document.body);

これにより、選択ボックスが正常に作成されますが、空白ではありません。実験を通じて、これが機能することがわかりました:

var $new = $('<select><option>1<option>2</select>').appendTo(document.body);
$new.prop('selectedIndex', -1);

これら 2 つの違いは、selectedIndexプロパティが設定されるとき、つまり本体に追加される前か後かということです。この下にある理由を説明できますか?

ここに JSFiddle があります: http://jsfiddle.net/R9auG/

4

2 に答える 2

2

アイテムが本文に追加された後に $.prop() 関数を実行する必要があるように見えます。最初のコードを使用した例を次に示します: http://jsfiddle.net/jakelauer/R9auG/311/

そしてコード自体:

$('<select><option>1</option><option>2</option></select>')
    .appendTo(document.body)
    .prop('selectedIndex', -1);

<option>PS - jQuery でタグを閉じていません。ブラウザはスマートで、これを修正していますが、私の例で行ったようにブラウザを閉じないと、大きな問題が発生する可能性があります。

于 2013-05-29T02:44:52.163 に答える
2

optionブラウザが最初に要素をレンダリングするときに属性を持つ sがないselected場合、ブラウザは最初の要素を選択します。

これは仕様で必要だと思っていましたが、これはHTML 4.01 では未定義であり、現在の仕様では何も見つかりません。

HTML 4.01仕様から、これがあります:

ノート。既存の実装ではこのケースの扱いが異なるため、現在の仕様は RFC 1866 ([RFC1866] セクション 8.1.3) とは異なります。

いずれかの要素に SELECTED 属性が存在しない限り、初期状態では最初のオプションが選択されています。

ユーザー エージェントの動作は異なるため、作成者は、各メニューに事前に選択されたデフォルトの OPTION が含まれていることを確認する必要があります。

いずれにせよ、それはまだそれが処理される方法のようです。

最初の例では、要素がレンダリングされるまでDOMオブジェクトが存在しないため、ブラウザはselectedIndexプロパティをまだ理解していません。そのプロパティは、ブラウザーがオブジェクトを作成するときに作成されます。まだ存在しないオブジェクトのプロパティを変更することはできません。select

これは紛らわしいです...ここでは、 jQueryオブジェクトとDOMオブジェクトという 2 つの異なるタイプのオブジェクトを扱っています。

2 番目の例では、ブラウザーは要素をレンダリングし、何も選択されていない (-1) と言うようにすぐに変更するプロパティをselect持つオブジェクトを作成します。selectedIndex

要素の仕様select詳細でそれについて読むと、「プレースホルダー ラベル オプション」が役立つ場合があります。

于 2013-05-29T04:37:46.660 に答える