1

嘿ii有选择框与长方法绑定到它的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()当您通过 jQuery方法或通过将选项的selected属性设置为 true来设置值时,它不会被触发。所以你必须手动触发更改事件。

你的代码

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

应该管用。也许,这不是因为您的代码引发了错误。这可能发生在这个地方

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

因为在这里你不执行数组的范围检查。

更好的方法是通过索引选择所需的选项,如下所示:

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

如果没有第 6 个选项,这样代码就不会崩溃。

但是,根据您的示例构建的这个fiddle可以正常工作。

于 2013-08-22T20:10:32.140 回答