HTML選択要素の選択オプションの変更


148

私のHTMLには、<select>3つの<option>要素が含まれています。jQueryを使用して、Javascriptに対して各オプションの値をチェックしたいと思いますvar。一致する場合、そのオプションの選択された属性を設定します。どうすればいいですか?


HTMLを投稿します。しかし、通常の方法で:$('#myselectid').val()
Samich

9
彼がなぜ反対票を投じられたのかわからない、彼は新しいユーザーであり、質問は正当なようです。
vol7ron

回答:


323

バニラJavaScript

プレーンな古いJavaScriptを使用する:

var val = "Fish";
var sel = document.getElementById('sel');
document.getElementById('btn').onclick = function() {
  var opts = sel.options;
  for (var opt, j = 0; opt = opts[j]; j++) {
    if (opt.value == val) {
      sel.selectedIndex = j;
      break;
    }
  }
}
<select id="sel">
    <option>Cat</option>
    <option>Dog</option>
    <option>Fish</option>
</select>
<button id="btn">Select Fish</button>

jQuery

しかし、本当に jQueryを使用したい場合:

var val = 'Fish';
$('#btn').on('click', function() {
  $('#sel').val(val);
});

jQuery-値属性の使用

オプションにテキストコンテンツとは異なる値属性があり、テキストコンテンツを介して選択する場合:

<select id="sel">
    <option value="1">Cat</option>
    <option value="2">Dog</option>
    <option value="3">Fish</option>
</select>
<script>
    var val = 'Fish';
    $('#sel option:contains(' + val + ')').prop({selected: true});
</script>

デモ

しかし、上記の設定があり、jQueryを使用して値で選択したい場合は、以前と同じように行うことができます。

var val = 3;
$('#sel').val(val);

モダンDOM

document.querySelectorHTMLOptionElement::selectedプロパティをサポートするブラウザの場合、これはこのタスクを実行するより簡潔な方法です。

var val = 3;    
document.querySelector('#sel [value="' + val + '"]').selected = true;

デモ

Knockout.js

<select data-bind="value: val">
    <option value="1">Cat</option>
    <option value="2">Dog</option>
    <option value="3">Fish</option>
</select>
<script>
    var viewModel = {
        val: ko.observable()
    };
    ko.applyBindings(viewModel);
    viewModel.val(3);
</script>

デモ

ポリマー

<template id="template" is="dom-bind">
    <select value="{{ val }}">
        <option value="1">Cat</option>
        <option value="2">Dog</option>
        <option value="3">Fish</option>
    </select>
</template>
<script>
    template.val = 3;
</script>

デモ

角度2

注:これは、最終的な安定版リリースでは更新されていません。

<app id="app">
    <select [value]="val">
        <option value="1">Cat</option>
        <option value="2">Dog</option>
        <option value="3">Fish</option>
    </select>
</app>
<script>
    var App = ng.Component({selector: 'app'})
        .View({template: app.innerHTML})
        .Class({constructor:  function() {}});

    ng.bootstrap(App).then(function(app) {
        app._hostComponent.instance.val = 3;
    });
</script>

デモ

Vue 2

<div id="app">
    <select v-model="val">
        <option value="1">Cat</option>
        <option value="2">Dog</option>
        <option value="3">Fish</option>
    </select>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
                val: null,
        },
        mounted: function() {
                this.val = 3;
        }
    });
</script>

デモ


1
選択した属性の設定方法がわからなかったので、これは特に便利でした。selectedIndexがあることを知りませんでした。ありがとう。
llihttocs 09/10/11

1
@aelgoa jsperf.com/option-select-loop/2最初のスニペットを修正してコードをより模倣しました。プリインクリメントではなくポストインクリメントを使用してから、3番目のテストよりも少し速い別のテストを追加しました。
kzh 2013年

1
サディスティックの場合:document.evaluate(".//select[@id='sel']/option[text()='Fish']", document.body, null, 9, null).singleNodeValue.selected = true;
kzh

1
@llihttocs今はどうですか?
kzh 2014

1
バニラのjavascriptを含めていただきありがとうございます。自分でコーディングするのが大好きな私たちのために:)
Peter Cullen

24

ここでjqueryを使用する例はどれも実際には正しくありません。値が変更されていても、selectが最初のエントリを表示したままになるためです。

アラスカを選択し、selectが正しいアイテムを選択したとおりに表示する正しい方法:

<select id="state">
    <option value="AL">Alabama</option>
    <option value="AK">Alaska</option>
    <option value="AZ">Arizona</option>
</select>

jqueryの場合:

$('#state').val('AK').change();

19

JavaScriptを使用して、select要素の値を変更できます。これにより、選択されたオプションがその値を持つオプションに変更されます。

document.getElementById('sel').value = 'bike';​​​​​​​​​​

デモ


1
あなたの例はタイミングのためにうまくいきません。ユーザーがボタンをクリックするまで待機するように更新しました: jsfiddle.net/xkqTR/3271
dlaliberte

これは、select要素でchangeイベントを発生させません。あなたはそれに解決策がありますか?
DragonKnight

10

マークアップ

<select id="my_select">
    <option value="1">First</option>
    <option value="2">Second</option>
    <option value="3">Third</option>
</select>

jQuery

var my_value = 2;
$('#my_select option').each(function(){
    var $this = $(this); // cache this jQuery object to avoid overhead

    if ($this.val() == my_value) { // if this option's value is equal to our value
        $this.prop('selected', true); // select this option
        return false; // break the loop, no need to look further
    }
});

デモ


これがまさに私が必要としていたことだと思います。私はすでにあなたのコードの数行を使用しました、そしてそれはうまくいくようです。素晴らしいスニペットをありがとう。
llihttocs 09/10/11

@llihttocs:助けてくれてうれしい。回答の左上にある投票数の下の空のチェックマークをクリックして、問題を解決する回答を自由に受け入れてください。この質問が解決済みとしてマークされ、同じ解決策を探している他の人が簡単に答えを見つけられるようにします。
シェフ、2011

4

select要素のselectedオプションのvalueとtextContent(表示されているもの)の両方を「Mango」に変更したいと思います。

機能した最も単純なコードは以下のとおりです。

var newValue1 = 'Mango'

var selectElement = document.getElementById('myselectid');
selectElement.options[selectElement.selectedIndex].value = newValue1;
selectElement.options[selectElement.selectedIndex].textContent = newValue1;

それが誰かを助けることを願っています。幸運を祈ります。
これがあなたを助けたなら賛成票を投じてください。


2

このデモをテストする

  1. 値に基づくオプションの選択

    var vals = [2,'c'];
    
    $('option').each(function(){
       var $t = $(this);
    
       for (var n=vals.length; n--; )
          if ($t.val() == vals[n]){
             $t.prop('selected', true);
             return;
          }
    });
  2. テキストに基づくオプションの選択

    var vals = ['Two','CCC'];                   // what we're looking for is different
    
    $('option').each(function(){
       var $t = $(this);
    
       for (var n=vals.length; n--; )
          if ($t.text() == vals[n]){            // method used is different
             $t.prop('selected', true);
             return;
          }
    });

HTMLのサポート

<select>
   <option value=""></option>
   <option value="1">One</option>
   <option value="2">Two</option>
   <option value="3">Three</option>
</select>

<select>
   <option value=""></option>
   <option value="a">AAA</option>
   <option value="b">BBB</option>
   <option value="c">CCC</option>
</select>

1
この例は非常に便利です。オプションを反復して選択した属性を設定する方法がわかりませんでした。そのような完全な答えをありがとう。
llihttocs 09/10/11

問題ありません。参考になる質問やコメントの横にある上向き矢印をクリックしてください。選択した回答の横にあるチェックマークを選択します。-費用はかかりませんが、費用はかかりません
vol7ron

1

すばらしい答え-探している人のためのD3バージョンは次のとおりです。

<select id="sel">
    <option>Cat</option>
    <option>Dog</option>
    <option>Fish</option>
</select>
<script>
    d3.select('#sel').property('value', 'Fish');
</script>

1

私はここに投稿された回答のほとんどすべてを使用しましたが、それには満足していなかったので、一歩先を掘り下げて、私のニーズに合った簡単な解決策を見つけ、皆さんと共有する価値があると感じました。
オプション全体を反復したり、JQueryを使用したりする代わりに、コアJSを使用して簡単な手順で実行できます。

<select id="org_list">
  <option value="23">IBM</option>
  <option value="33">DELL</option>
  <option value="25">SONY</option>
  <option value="29">HP</option>
</select>

したがって、選択するオプションの値を知っている必要があります。

function selectOrganization(id){
    org_list=document.getElementById('org_list');
    org_list.selectedIndex=org_list.querySelector('option[value="'+id+'"]').index;
}

使い方?

selectOrganization(25); //this will select SONY from option List

あなたのコメントは大歓迎です。:) AzmatHunzai。


1

多くの検索の後、属性でoptionはなく内部テキストのみを知っている選択リストで@kzhを試しvalueました。選択回答に基づくこのコードはurl、このフォーマットの 現在のページに従って選択オプションを変更するために使用しましたhttp://www.example.com/index.php?u=Steve

<select id="sel">
    <option>Joe</option>
    <option>Steve</option>
    <option>Jack</option>
</select>
<script>
    var val = window.location.href.split('u=')[1]; // to filter ?u= query 
    var sel = document.getElementById('sel');
    var opts = sel.options;
    for(var opt, j = 0; opt = opts[j]; j++) {
        // search are based on text inside option Attr
        if(opt.text == val) {
            sel.selectedIndex = j;
            break;
        }
    }
</script>

これurlにより、選択したパラメータが表示されたままになり、ユーザーフレンドリーになり、訪問者は現在表示しているページまたはプロファイルを把握できます。


0

レジスタを更新してajax経由でリクエストの状態を変更した後、これを使用してから、同じスクリプトで新しい状態でクエリを実行し、selectタグ要素の新しい状態に入れてビューを更新しました。

var objSel = document.getElementById("selectObj");
objSel.selectedIndex = elementSelected;

これがお役に立てば幸いです。


-1

少しすっきりとしたVanilla.JSバージョン。あなたがすでにnodeList欠けているのを修正したと仮定すると.forEach()

NodeList.prototype.forEach = Array.prototype.forEach

ただ:

var requiredValue = 'i-50332a31',   
  selectBox = document.querySelector('select')

selectBox.childNodes.forEach(function(element, index){
  if ( element.value === requiredValue ) {
    selectBox.selectedIndex = index
  }
})
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.