1

こんにちは、長いメソッドがバインドされた選択ボックスがあり、html の選択ボックスは次のようになります。

HTML:

<select id="select1">
  <option>First select Advertiser</option>
  <?php
     buildSelectOptionsFromPagination();  // Dynamically build the options list
  ?>
</select> 

Javascript:

$('#select1').change(function(){
                alert('#select1');
                $('#innerP').remove();
                $('#innerH').remove();
                $('#waitmsg').append('  ...</h2></p>');
                $("#show_c ").attr("disabled", true);   


                 $.ajax({
                        url: 'observer.php',
                        data: "ctrl=in&v_id="+v_id,
                        success: function(data) {
                             var newData = "<option id=\"firstopt_insert\"> blah blah <\/option>" + data;
                             $('#in111').html(data);
                             $('#in222').trigger('change');

                        },
                        error: function (request, status, error) {
                            alert(request.responseText+"\nThere was an server error please refresh the page 1 ");
                        }                           
                });
            });

今、私は外側から成功せずにこの選択ボックス変更メソッドをトリガーしようとします.2メソッドをトリガーします.1.これでインデックスによる選択オプションはうまく機能します:

$('#select1 option')[5].selected = true;

2今、私はこのように成功せずに変更メソッドメソッドをトリガーしたい:

$('#select1').trigger('change');
or 
$('#select1').bind('change', function(){ ; });

そして、何もトリガーしないのはなぜですか?

4

1 に答える 1

6

ユーザーがオプションを選択すると、変更イベントがトリガーされます。val()オプションのselected属性をtrueに設定することにより、 jQueryメソッドを介して値を設定している場合はトリガーされません。そのため、変更イベントを手動でトリガーする必要があります。

あなたのコード

$('#select1').trigger('change');

動作するはずです。おそらく、コードでエラーが発生するため、そうではありません。こんなところで起こるかも

$('#select1 option')[5].selected = true;

ここでは、配列の範囲チェックを実行しないためです。

より良い方法は、次のようにインデックスで必要なオプションを選択することです。

$('#select1 > :nth-child(6)').prop('selected', true);

この方法では、6 番目のオプションがない場合でも、コードはクラッシュしません。

ただし、例から構築されたこのfiddleは正常に機能します。

于 2013-08-22T20:10:32.140 に答える