首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态创建的dropdownlist不会触发

动态创建的dropdownlist不会触发
EN

Stack Overflow用户
提问于 2013-01-08 01:37:30
回答 3查看 229关注 0票数 0

嘿,伙计们,我很难让我的下拉列表触发器中包含动态创建的值选项。

代码语言:javascript
复制
                <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:

代码语言:javascript
复制
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的新手。提前感谢

EN

回答 3

Stack Overflow用户

发布于 2013-01-08 01:46:11

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

代码语言:javascript
复制
$('#org-subject-advisory-level').trigger("change");

在初始ajax调用的success:回调中,追加的第一个<option>值应该是被警告的内容。

票数 0
EN

Stack Overflow用户

发布于 2013-01-08 01:46:16

正如@Ohgodway在评论中提到的那样...大多数情况下,您的ajax调用在触发器被调用之前是不会完成的,所以当附加select选项时,在ajax成功函数中调用您的触发器函数。

试试这个:

代码语言:javascript
复制
 $.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
EN

Stack Overflow用户

发布于 2013-01-08 02:10:51

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

但在触发change事件之前,请确保默认情况下选择任何选项。对于某些浏览器,第一个是默认选中的,但对于某些浏览器,没有选择任何内容,这将返回null。所以最好是显式地选择任何选项。喜欢

代码语言:javascript
复制
$('#org-subject-advisory-level').find('option:last').attr('selected',true);

此外,我建议您更改您的循环方法,使用原生for循环而不是jquery each。您可以通过优化代码来提高效率,如下所示

代码语言:javascript
复制
 $.each(data, function(i, item) {

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

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

代码语言:javascript
复制
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(''));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14201107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档