Jquery 使用加载和打开功能工作

Jquery 使用加载和打开功能工作,jquery,Jquery,我有以下代码: <div id="gll_select"> <script> var caffe = $("#caffe").val(); $("#gll_select").load("<?php echo base_url() ?>form/galleries", {id : caffe}); </script> </div> 将

我有以下代码:

<div id="gll_select">
            <script>
             var caffe = $("#caffe").val();
             $("#gll_select").load("<?php echo base_url() ?>form/galleries", {id : caffe});  
            </script>
</div>
将加载以下内容:

<select name="gll" id="gll">
    <?php foreach ($galleries as $key) : ?>
        <?php if($id == $key['caffe_id']) :?>
        <option value="<?php echo $key['id_gallery'] . " " . $key['name'] ?>"><?php echo $key['name'] ?></option>
        <?php endif; ?>
    <?php endforeach; ?>        
</select>
还有这个:

$("#gll").on('change',function(){
    var cff_name = $("#caffe_name").val();
    var gll = $("#gll").val();
    var gll = gll.split(' ');
    var gll_id = gll[0];            
    var data = "cff_name=" + cff_name + "&gll_id=" + gll_id;
    $('table tbody').empty();
    $.ajax({                
                url: '<?php echo base_url() ?>upload/get_files',
                dataType: 'json', 
                data : data,
                success : function(data) {                   
                    var fu = $('#fileupload').data('fileupload'), 
                    template;
                    fu._adjustMaxNumberOfFiles(-data.length);
                    template = fu._renderDownload(data)
                    .appendTo($('#fileupload .files'));                    
                    // Force reflow:
                    fu._reflow = fu._transition && template.length &&
                    template[0].offsetWidth;
                    template.addClass('in');
                    $('#loading').remove();
                }
});
});

问题是,在变化中什么也不会发生。我需要做什么?

您应该在加载调用完成后附加gll元素的处理程序,这实际上就像一个异步ajax调用:可能在加载html代码之前,您已经为变更事件定义了处理程序,因此不会发生任何事情,因为select还不存在

试着用这种方式改变

$("#gll_select").load("<?php echo base_url() ?>form/galleries", {id : caffe}, 
    function() {
        $("#gll").on('change',function(){
        ...
    }
});

load函数位于页面的最下方,onchange位于页面底部,中间有大量HTML代码。load执行异步ajax调用。代码放在哪里并不重要。尝试在附加处理程序之前放置一个console.log$'gll.length:它是否返回1?我得到0。这是什么意思?这正是我所说的:当您附加事件处理程序时,元素仍然不存在,因为load异步获取html。在您从服务器获得答案之前,可能要经过大约十分之一秒的时间。因此,在加载完成后,必须将处理程序附加到回调中