ドロップダウンのトリガー変更イベント


86

jqueryを使用して$(document).readyのドロップダウンの変更イベントをトリガーしたいと思います。

ユーザーの詳細ページに国と州のカスケードドロップダウンがあります。C#を使用してMVCで国と州の値(ユーザーIDに基づいてDBから取得)を設定するにはどうすればよいですか?


これをもっと見つけるために、javascriptやjQueryなどのタグをもう少し入れたいと思うかもしれません
キセノン

回答:


184

私はそれほど多くのJQueryを知りませんが、この構文でネイティブイベントを発生させることができると聞きました。

$(document).ready(function(){

    $('#countrylist').change(function(e){
       // Your event handler
    });

    // And now fire change event when the DOM is ready
    $('#countrylist').trigger('change');
});

trigger()またはchange()を呼び出す前に、changeイベントハンドラーを宣言する必要があります。宣言しないと、起動されません。@LenielMacaferiに言及していただきありがとうございます。

詳細はこちら


13
呼び出す前に、trigger()またはchange()この回答に正しく示されているように、変更イベントハンドラーを宣言する必要があります。つまり、イベントハンドラーコードが呼び出しの下に表示されても、何も起こりません。:)
Leniel Maccaferri 2013

3
@ LenielMacaferi1時間か2時間節約してくれてありがとう。
フランクノッケ2013年

@ChristopheEblé&Leniel Macaferi、どうもありがとう。クリストフ、レニエルのコメントをあなたの答えに加えていただけませんか?
Zaxter 2015年

.change()を使用しましたが、jquery 3.1.1ではうまくいきませんでした。この投稿の後、期待どおりにトリガーされます。
Sorangwala Abbasali 2016

これは無限にループすることになり、これに対するすべての人の解決策はループすることになります。
Nathan McKaskle 2017年

12

これを試して:

$(document).ready(function(event) {
    $('#countrylist').change(function(e){
         // put code here
     }).change();
});

変更イベントを定義し、すぐにトリガーします。これにより、イベントハンドラーが呼び出される前に定義されます。

元のポスターに答えるのに遅れるかもしれませんが、他の誰かが省略表記の恩恵を受ける可能性があり、これはjQueryの連鎖などに従います

jqueryチェーン


7

これを試して:

$('#id').change();

私のために働きます。

値を設定するとともに1行で: $('#id').val(16).change();


3
$( '#id')。val(16).change(); 私のためにそれをしました。
tomoMiha 2016年

1
ありがとう、@ TomoMiha。答えにそれを追加しました。
d.popov 2016年

2

ドロップダウンをリンクしようとしている場合、それを行う最良の方法は、事前に作成された選択ボックスを返すスクリプトと、それを要求するAJAX呼び出しを用意することです。

必要に応じて、jQueryのAjaxメソッドのドキュメントを次に示します。

$(document).ready(function(){

    $('#countrylist').change(function(e){
        $this = $(e.target);
        $.ajax({
            type: "POST",
            url: "scriptname.asp", // Don't know asp/asp.net at all so you will have to do this bit
            data: { country: $this.val() },
            success:function(data){
                $('#stateBoxHook').html(data);
            }
        });
    });

});

次に、IDが「stateBoxHook」の状態選択ボックスの周囲にスパンを設定します


カスケードドロップダウンがあります:<%= Html.DropDownList( "MyCountries"、 "--- Select Country ---")%> <%= Html.CascadingDropDownList( "MyStates"、 "MyCountries")%>設定できますMyCountriesの値を$( "#MyCountries")。val( '<%= Model.CountryId%>');として $(document).readyで。ただし、「州の​​選択」オプションが1つしか表示されないため、州の値を設定できません。これらはカスケードドロップダウンであるため、国の変更イベントで入力する必要があります。これは実際の問題です。
プラサド

あなたが何を求めているのかまだわかりません。国を選択し、その国の州にリストを絞り込むシステムを実現しようとしていますか?この場合、サーバーにAJAX呼び出しを行い、選択した国を送信してから、その国の州のリストを返す必要があります。
キセノン

ユーザープロファイルを追加しながら、米国を国、アラバマを州として設定しました。これはカスケードドロップダウンです。そして、そのページに戻ってフィールドを編集するとき、国と州に以前に設定した値を入力する必要があります。ユーザープロファイルの追加に問題はありません。[編集]ページに戻ると、[国]ドロップダウンの値を設定できます。状態ドロップダウンでは、国の値が入力されるカスケードであるため、値が入力されません。イベントを変更します。このために、州がいっぱいになり、州を設定できるように、国の変更イベントをトリガーする必要があります
Prasad

なぜそうなのですか?ページの読み込み時に国が何であるかがわかっているため、正しい州を選択して、州の正しい選択リストを表示できます。国を変更すると、とにかくリストが再読み込みされます。
キセノン

1

または、ドロップダウンリスト自体にonchange属性を設定することもできます。その場合、onchangeはこのような特定のjquery関数を呼び出します。

<input type="dropdownlist" onchange="jqueryFunc()">

<script type="text/javascript">
$(function(){
    jqueryFunc(){
        //something goes here
    }
});
</script>

これがお役に立てば幸いです。このコードは単なるドラフトであり、どのIDEでもテストされていないことに注意してください。ありがとう


これは、ページが最初にロードされたときに変更イベントをトリガーしません(OPの質問による)

0

何らかの理由で、jQueryここで提供されている他のソリューションは、コンソールからスクリプトを実行するときに機能しましたが、Chromeブックマークレットからトリガーされたときに機能しませんでした

幸い、このVanilla JSソリューションtriggerChangeEvent関数)は機能しました。

/**
  * Trigger a `change` event on given drop down option element.
  * WARNING: only works if not already selected.
  * @see /programming/902212/trigger-change-event-of-dropdown/58579258#58579258
  */
function triggerChangeEvent(option) {
  // set selected property
  option.selected = true;
  
  // raise event on parent <select> element
  if ("createEvent" in document) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("change", false, true);
    option.parentNode.dispatchEvent(evt);
  }
  else {
    option.parentNode.fireEvent("onchange");
  }
}

// ################################################
// Setup our test case
// ################################################

(function setup() {
  const sel = document.querySelector('#fruit');
  sel.onchange = () => {
    document.querySelector('#result').textContent = sel.value;
  };
})();

function runTest() {
  const sel = document.querySelector('#selector').value;
  const optionEl = document.querySelector(sel);
  triggerChangeEvent(optionEl);
}
<select id="fruit">
  <option value="">(select a fruit)</option>
  <option value="apple">Apple</option>
  <option value="banana">Banana</option>
  <option value="pineapple">Pineapple</option>
</select>

<p>
  You have selected: <b id="result"></b>
</p>
<p>
  <input id="selector" placeholder="selector" value="option[value='banana']">
  <button onclick="runTest()">Trigger select!</button>
</p>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.