2013-01-07 31 views
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的新手。在此先感谢

+0

什么 “警报” 得有点效率?我没有在你的代码中看到它。 –

+0

我更新它。请刷新 – Aoi

+2

空值的可能原因是这些函数全部在DOM准备就绪的情况下执行。您的ajax调用可能尚未完成,因此,当您构建更改函数并触发它时,值尚未设置。如果你在''ajax()'的'success'函数中放置$('#org-subject-advisory-level')。trigger(“change”); – Ohgodwhy

回答

0

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

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

success:回调初始Ajax调用和附加应该是什么惊动了第一<option>值内。

0

AS @Ohgodway在评论中提到...大多数情况下,您的ajax调用在调用触发器之前不会完成,因此在添加select选项时,请在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"); 

     } 
}); 
0

张贴上述触发成功回调或jQuery的AJAX的完整回调内部的变化事件。

但在触发更改事件之前,请确保默认选择任何选项。对于某些浏览器,首先默认选择一个浏览器,但对于某些浏览器,将不会选择返回null。 所以你选择任何选项显然更好。 像

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

进一步,我会建议你改变你的循环方法,使用原生的循环,而不是每一个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('')); 
相关问题