0

嘿伙计们,我很难用动态创建的值选项来触发我的下拉列表。

                <label>Year Level Advisory: </label>
                <select id="org-subject-advisory-level" name="subject_level">

                </select>



                <label>Subjects: </label>
                <select id="subjects-list">

                </select>

jQuery ajax:

function get_my_advisory(){

     $.ajax({                
            url:'func_students.php',
            type:'POST',
            dataType:'json',
            data:{'func_num':'4'},
            success: function (data){

               $.each(data, function(i, item) {
                   var options = "<option value="+data[i].sec_level+">"+data[i].sec_level+"</option>";

                     $('#org-subject-advisory-level').append(options);
                   }); 

          }
    });
  }
get_my_advisory();


$('#org-subject-advisory-level').on("change", function(){

    var advisory_year_level = $('#org-subject-advisory-level').val();

alert(advisory_year_level);
    $('#subjects-list').html("");

    $.ajax({
                    type:'POST',
                    url:'add_subject.php',
               dataType:'json',
                   data:{'func_numbr':'9','year_level':advisory_year_level},
                success:function (data){
                  $.each(data, function(i, item) {

                   html = "<option value="+data[i].subj_id+">"+data[i].subj_name+"</option>";

                     $('#subjects-list').append(html);
                   });
                }

                });



  });

  $('#org-subject-advisory-level').trigger("change");

触发器有效,但它在警报时返回空值,我想知道为什么会这样。希望得到你们的帮助。我是 jquery 和 php 的新手。提前致谢

4

3 回答 3

0

如上所述,在成功回调或 jQuery ajax 的完整回调中触发您的更改事件。

但在触发更改事件之前,请确保默认选择任何选项。对于某些浏览器,默认选择第一个,但对于某些浏览器,没有选择任何内容,这将返回 null。所以最好你明确地选择任何选项。喜欢

$('#org-subject-advisory-level').find('option:last').attr('selected',true);

此外,我建议您更改循环方法,使用本机 for 循环而不是 jquery。您可以通过优化代码来提高效率,例如

 $.each(data, function(i, item) {

 html = "<option value="+data[i].subj_id+">"+data[i].subj_name+"</option>";

 $('#subjects-list').append(html);
 });

var html=[];
for(var i=0; i<data.length; i++){
html.push("<option value="+data[i].subj_id+">"+data[i].subj_name+"</option>");
}
$('#subjects-list').append(html.join(''));
于 2013-01-07T18:10:50.537 回答
0

这应该可以正常工作,但初始.trigger(底部的那个)是在加载任何选项之前完成的。在到达该代码之前,最初的 ajax 请求很可能尚未完成。移动

$('#org-subject-advisory-level').trigger("change");

success:到初始ajax调用的回调内部<option>,附加的第一个值应该是警报。

于 2013-01-07T17:46:10.913 回答
0

正如@Ohgodway 在评论中提到的那样……在调用触发器之前,大多数情况下您的ajax 调用都不会完成,因此在附加选择选项时在ajax 成功函数中调用您的触发器函数。

尝试这个:

 $.ajax({                
        url:'func_students.php',
        type:'POST',
        dataType:'json',
        data:{'func_num':'4'},
        success: function (data){

           $.each(data, function(i, item) {
               var options = "<option value="+data[i].sec_level+">"+data[i].sec_level+"</option>";

                 $('#org-subject-advisory-level').append(options);
               }); 

         $('#org-subject-advisory-level').trigger("change");

      }
});
于 2013-01-07T17:46:16.497 回答