オプションがjQueryで選択されているかどうかをチェックし、そうでない場合はデフォルトを選択します


207

jQueryを使用して、選択メニューでオプションが選択されているかどうかを確認し、選択されていない場合は、選択されているオプションの1つを割り当てます。

(selectは、継承したアプリのPHP関数の迷路を使用して生成されるので、これを理解するための簡単な修正です:)


回答:


270

あなたが何を達成したいのか正確にはわかりませんが、このコードは私にとってはうまくいきました。

<select id="mySelect" multiple="multiple">
  <option value="1">First</option>
  <option value="2">Second</option>
  <option value="3">Third</option>
  <option value="4">Fourth</option>
</select>

<script type="text/javascript"> 
$(document).ready(function() {
  if (!$("#mySelect option:selected").length) {
    $("#mySelect option[value='3']").attr('selected', 'selected');
  }
});
</script>

86
選択は次のように読みやすくなります。$("#mySelect").val(3);
JørnSchou-Rode

6
これで正しい軌道に乗ることができましたが、これを行う必要がありました $("#mySelect option")[2]['selected'] = true; 。Firebugでオブジェクト構造を調査した結果、そのことがわかりました。
センペロス2010

28
jQuery 1.6以降、プロパティを直接設定できます。$("#mySelect").prop("selectedIndex", 2)
Gradbot

1
.val(x)バージョンはInternet Explorer 8では機能しないため、すべてのブラウザーで機能するため、@ gradbotは正しく機能します。
ソーシー

30

このためにjQueryを使用する必要はありません。

var foo = document.getElementById('yourSelect');
if (foo)
{
   if (foo.selectedIndex != null)
   {
       foo.selectedIndex = 0;
   } 
}

58
OPは「jQueryを使用しています...」と述べているので、それを無視することは不必要に思えますね。
BryanH 2009

13
個人的には、特定の質問をした場合、別の方法ではなく、その質問に対する回答を得たいと思います。
vitto

18
時には、あなたが求める答えは、あなたが期待するものではない場合があります。
MrBoJangles

5
いずれにせよ、彼はjQueryを求めました。jQueryの答えは、特に基本JavaScriptを理解していない場合は、かなり理解しやすくなります。
shmeeps

6
それを行うための優れた方法です。ベースJavaScriptは非常に便利な場合があります。
ハラグハン

13

この質問は古く、多くの意見があるので、確信のある人を助けるいくつかのものをそこに捨てます。

選択要素に選択項目があるかどうかを確認するには:

if ($('#mySelect option:selected').length > 0) { alert('has a selected item'); }

または、選択に何も選択されていないかどうかを確認するには:

if ($('#mySelect option:selected').length == 0) { alert('nothing selected'); }

または、ある種のループに入っていて、現在の要素が選択されているかどうかを確認したい場合:

$('#mySelect option').each(function() {
    if ($(this).is(':selected')) { .. }
});

ループ中に要素が選択されていないかどうかを確認するには:

$('#mySelect option').each(function() {
    if ($(this).not(':selected')) { .. }
});

これらはこれを行う方法のいくつかです。jQueryには同じことを実現するさまざまな方法があるため、通常、最も効率的であると思われる方法を選択するだけです。


"not"が機能しません$( '#mySelect option')。each(function(){if($(this).not( ':selected')){..}}); したがって、否定が使用されるのは次のようなものです(!$(this).is( ':selected')){..}ブラウザ:Chrome; Jqueryバージョン:3.1.1
Anil kumar 2017年

12

lencioniの答えは私がお勧めするものです。オプションのセレクターを変更して、('#mySelect option:last')" #mySelect option[value='yourDefaultValue']" を使用して特定の値を持つオプションを選択できます。 セレクターの詳細

クライアントで選択リストを広範囲に使用している場合は、このプラグインを確認してくださいhttp : //www.texotela.co.uk/code/jquery/select/。選択リストを操作するいくつかの例を確認したい場合は、ソースを参照してください。


9

これが、選択したオプションを変更する私の機能です。jQuery 1.3.2で動作します

function selectOption(select_id, option_val) {
    $('#'+select_id+' option:selected').removeAttr('selected');
    $('#'+select_id+' option[value='+option_val+']').attr('selected','selected');   
}

7
<script type="text/javascript"> 
$(document).ready(function() {
  if (!$("#mySelect option:selected").length)
   $("#mySelect").val( 3 );

});
</script>


3

私はすでに言及したtexotelaプラグインに出くわしました、それは私にそれをこのように解決させました:

$(document).ready(function(){
    if ( $("#context").selectedValues() == false) {
    $("#context").selectOptions("71");
    }
});


2

これは動作することがわかった簡単なスクリプトでした。結果はラベルに割り当てられます。

$(".Result").html($("option:selected").text());

1

君たちは選択するのにやりすぎている。値で選択するだけです:

$("#mySelect").val( 3 );

2
これは、別のオプションがすでに選択されているかどうかに関係なく、オプション3を選択しています。
ジョーダンライアンムーア


1

オプションが選択されているかどうかを確認し、選択されていないときにデフォルトを選択するための良い方法を見つけました。

    if(!$('#some_select option[selected="selected"]').val()) {
        //here code if it HAS NOT selected value
        //for exaple adding the first value as "placeholder"
        $('#some_select option:first-child').before('<option disabled selected>Wybierz:</option>');
    }

場合#some_selectの has'tのデフォルト選択されたオプションは、その後)(.valがある未定義


0
$("option[value*='2']").attr('selected', 'selected');
// 2 for example, add * for every option

0
$("#select_box_id").children()[1].selected

これは、jqueryでオプションが選択されているかどうかを確認する別の方法です。これはブール値(TrueまたはFalse)を返します。

[1]は選択ボックスオプションのインデックスです


0

選択ボックスのイベントを発火するように変更し、発動すると、選択したオプションのid属性をプルするだけです:-

$("#type").change(function(){
  var id = $(this).find("option:selected").attr("id");

  switch (id){
    case "trade_buy_max":
      // do something here
      break;
  }
});

0

私はちょうど似たようなものを探していて、これを見つけました:

$('.mySelect:not(:has(option[selected])) option[value="2"]').attr('selected', true);

これにより、オプションがまだ選択されていないクラス内のすべての選択メニューが検索され、デフォルトのオプション(この場合は「2」)が選択されます。

:selected代わりに使用してみましたが[selected]、何も属性がなくても常に何かが選択されているため、うまくいきませんでした


0

各オプションを明示的にチェックして、「selected」属性があるかどうかを確認する必要がある場合は、これを行うことができます。それ以外の場合option:selectedは、最初のデフォルトオプションの値を取得します。

var viewport_selected = false;      
$('#viewport option').each(function() {
    if ($(this).attr("selected") == "selected") {
        viewport_selected = true;
    }
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.