HTML選択のonChangeでパラメーターを渡す方法


197

私はJavaScriptとjQueryの初心者です。1つのcombobox-Aを表示します。これは、onChange()の別の場所にコンテンツ<select>が選択されたHTML idです。

selectを使用して完全なコンボボックスを渡すにはどうすればよいidですか?また、onChangeイベントの発生時に他のパラメーターを渡すにはどうすればよいですか?


5
コードを投稿できますか?
KJYe.Name葉家仁

回答:


370

function getComboA(selectObject) {
  var value = selectObject.value;  
  console.log(value);
}
<select id="comboA" onchange="getComboA(this)">
  <option value="">Select combo</option>
  <option value="Value1">Text1</option>
  <option value="Value2">Text2</option>
  <option value="Value3">Text3</option>
</select>

上記の例は、OnChangeイベントでコンボボックスの選択された値を取得します。


ありがとう、これでうまくいきました。基本的には同じコンボボックスを別の場所に表示したいので、2つの異なるIDを2つのコンボボックスに指定しました。とにかく、同じコンボボックスを別の場所に表示できるということです。どんな助けでも大歓迎です。
Gendaful 2011

13
内部の値を取得するより簡潔な方法getComboA()var value = sel.value;
Yony

4
変更イベントは、選択ボックスがフォーカスを失った場合にのみ発生します。値が変更された直後にイベントを発生させる方法はありますか?
doABarrelRoll721 2016

2
代わりにthis.valueを使用してください。これは機能します=)これを送信すると、select要素全体が送信されます
Colin Rickels

私の場合、コードはFirefoxでは機能していますがChromeでは機能していません。
avijit bhattacharjee

50

状況によっては便利な別のアプローチとして、次の<option />ように、選択した値を関数に直接渡す方法があります。

function myFunction(chosen) {
  console.log(chosen);
}
<select onChange="myFunction(this.options[this.selectedIndex].value)">
  <option value="1">Text 1</option>
  <option value="2">Text 2</option>
</select>


1
これはまさに私が必要としたものでした。すでに色見本をクリックしたときにカラー写真を変更するjavascript関数がありました。しかし、PayPalドロップダウン選択オプションでも機能するように要求しました。これを使用しましたが、「値」を使用する代わりに(Paypalで必要だったため)、写真の変更に使用した変数名を使用して、各オプションに「ラベル」を追加しました。完璧に働きました!ありがとう!!
FlashNoob468 2014

5
これはいいね。より簡単な有効なオプションは次のとおりです。<select onChange = "myFunction(this.value)">
Daniel Silva

1
選択したオプションの他の属性にアクセスするのに役立ちます。
Cees Timmerman

31

jQueryでそれを行う方法について:

<select id="yourid">
<option value="Value 1">Text 1</option>
<option value="Value 2">Text 2</option>
</select>

<script src="jquery.js"></script>
<script>
$('#yourid').change(function() {
  alert('The option with value ' + $(this).val() + ' and text ' + $(this).text() + ' was selected.');
});
</script>

また、JavaScriptとjQueryは同一ではないことも知っておく必要があります。jQueryは有効なJavaScriptコードですが、すべてのJavaScriptがjQueryであるとは限りません。違いを調べ、適切なものを使用していることを確認してください。


2
試してみましたが、document.readyメソッドを入れてもchange関数が呼び出されません。私のコードはhtmlData.push( '<select id = "choose" name = "choose">');です。$( '#choose')。change(function(){alert( 'change called'); alert( '値が' + $(this).value()+ 'およびテキストが' + $(this)のオプション)。 text()+ 'が選択されました。');これで私を助けてください
Gendaful

@Gendaful:htmlData.push($('<select id="choose" name="choose">'));トリックを実行する必要があります(以前に本格的なノードではなく文字列をプッシュしました)。> 6年が経過しました...
ヨハネス

6

JavaScriptソリューション

<select id="comboA">
<option value="">Select combo</option>
<option value="Value1">Text1</option>
<option value="Value2">Text2</option>
<option value="Value3">Text3</option>
</select>
<script>
 document.getElementById("comboA").onchange = function(){
    var value = document.getElementById("comboA").value;
 };
</script>

または

<script>
 document.getElementById("comboA").onchange = function(evt){
    var value = evt.target.value;
 };
</script>

または

<script>
 document.getElementById("comboA").onchange = handleChange;

 function handleChange(evt){
    var value = evt.target.value;
 };
</script>

これは、ここで最も一般的で包括的なソリューションです。ありがとう!
divs1210

5

私は@Piyushの回答が役に立ち、プログラムに選択を作成する場合、それに追加するだけで、この動作を明確にすることができない重要な方法があります。関数があり、新しい選択を作成するとします。

var changeitem = function (sel) {
  console.log(sel.selectedIndex);
}
var newSelect = document.createElement('select');
newSelect.id = 'newselect';

通常の動作は言うことかもしれません

newSelect.onchange = changeitem;

しかし、これは実際に渡された引数を指定することを許可しないので、代わりにこれを行うことができます:

newSelect.setAttribute('onchange', 'changeitem(this)');

そして、あなたはパラメータを設定することができます。最初の方法で行う場合、onchange関数に渡される引数はブラウザーに依存します。2番目の方法は、クロスブラウザーで問題なく動作するようです。


1
悪のevalような文字列からコードへの変換は必要ありません。実際にnewSelect.onchange = changeitem;changeitemを次のように書き直した場合var changeitem = function () {console.log(this.selectedIndex); };(つまりthis、関数の引数の代わりに使用した場合)は正常に機能します。または、そのままにchangeitemして書き込みnewSelect.onchange = function () {changeitem(this); };ます。
Steve Byrnes、2013年

1
newSelect.setAttribute( 'onchange'、 'changeitem(this)'); -そのための
乾杯

5

jQueryソリューション

選択したオプションのテキスト値を取得する方法

通常、select要素には、アクセスする2つの値があります。
まず、サーバーに送信するがあります。これは簡単です。

$( "#myselect" ).val();
// => 1

2番目は、選択のテキスト値です。
たとえば、次の選択ボックスを使用します。

<select id="myselect">
  <option value="1">Mr</option>
  <option value="2">Mrs</option>
  <option value="3">Ms</option>
  <option value="4">Dr</option>
  <option value="5">Prof</option>
</select>

「1」だけではなく最初のオプションが選択されている場合に「Mr」という文字列を取得するには、次のようにします。

$( "#myselect option:selected" ).text();
// => "Mr"  

こちらもご覧ください


5

これは私に役立ちます。

選択の場合:

$('select_tags').on('change', function() {
    alert( $(this).find(":selected").val() );
});

ラジオ/チェックボックスの場合:

$('radio_tags').on('change', function() {
    alert( $(this).find(":checked").val() );
});

3

以下のコードを試すことができます

<select onchange="myfunction($(this).val())" id="myId">
    </select>

1

このコードを書いたら、selectのonChangeイベントを説明するだけで、このコードをhtmlとして保存し、出力を確認できます。わかりやすくなっています。

<html>
    <head>
        <title>Register</title>
    </head>
    <body>
    <script>
        function show(){
            var option = document.getElementById("category").value;
            if(option == "Student")
                  {
                        document.getElementById("enroll1").style.display="block";
                  }
            if(option == "Parents")
                  {
                        document.getElementById("enroll1").style.display="none";
                  }
            if(option == "Guardians")
                  {
                        document.getElementById("enroll1").style.display="none";
                  }
        }
    </script>
            <form action="#" method="post">
                <table>
                    <tr>
                        <td><label>Name </label></td>
                        <td><input type="text" id="name" size=20 maxlength=20 value=""></td>
                    </tr>
                    <tr style="display:block;" id="enroll1">
                        <td><label>Enrollment No. </label></td>
                        <td><input type="number" id="enroll" style="display:block;" size=20 maxlength=12 value=""></td>
                    </tr>
                    <tr>
                        <td><label>Email </label></td>
                        <td><input type="email" id="emailadd" size=20 maxlength=25 value=""></td>
                    </tr>
                    <tr>
                        <td><label>Mobile No. </label></td>
                        <td><input type="number" id="mobile" size=20 maxlength=10 value=""></td>
                    </tr>
                    <tr>
                        <td><label>Address</label></td>
                        <td><textarea rows="2" cols="20"></textarea></td>
                    </tr>
                    <tr >
                        <td><label>Category</label></td>
                        <td><select id="category" onchange="show()">    <!--onchange show methos is call-->
                                <option value="Student">Student</option>
                                <option value="Parents">Parents</option>
                                <option value="Guardians">Guardians</option>
                            </select>
                        </td>
                    </tr>
                </table><br/>
            <input type="submit" value="Sign Up">
        </form>
    </body>
</html>

1

誰かがReactソリューションを探している場合に備えて、追加の依存関係をダウンロードする必要がないように書くことができます。

<select onChange={this.changed(this)}>
   <option value="Apple">Apple</option>
   <option value="Android">Android</option>                
</select>

changed(){
  return e => {
    console.log(e.target.value)
  }
}

次のように、changed()関数をコンストラクタにバインドしてください。

this.changed = this.changed.bind(this);

0

これは私のために働いたonchange = setLocation($(this).val())

ここに。

    @Html.DropDownList("Demo", 
new SelectList(ViewBag.locs, "Value", "Text"), 
new { Class = "ddlStyle", onchange = "setLocation($(this).val())" });
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.