使用jquery为动态创建的下拉列表设置onchange事件

时间:2014-12-04 10:09:18

标签: javascript jquery

我正在创建两个这样的下拉列表

var drp_nt = $('<select />', {
                               'id'     : 'drp_' + nt,
                               'name'   : 'drp_' + nt+'[]',
                               'onchange' : check_data(),
                               'multiple': true});

var drp_cnt = $('<select />', {
                              'id'     : 'drp_' + cnt,
                              'name'   : 'drp_' + cnt+'[]',
                              'onchange' : check_data(),
                              'multiple': true});

现在我正在定义像这样的check_data_function

function check_data()
{
    if($("select option:selected").length==2)
        alert('Two Dropdown Selected');
    else
        alert($("select option:selected").length);
}

但问题是,check_data()函数没有被调用。

我怎样才能实现这一目标.. ???

这是我的HTML

<div id="cont_drp_nt" class="drp_container">
<img id="drp_nt_loader" class="loader_img" src="images/ajax-loader-1.gif" style="display: none;">
<select id="drp_nt" name="drp_nt[]" multiple="multiple" style="display: none;">
<option value="http://api.hasoffers.com/v3/Affiliate_Offer.json">http://api.hasoffers.com/v3/Affiliate_Offer.json</option>
</select>
<div class="btn-group">
<button class="multiselect dropdown-toggle btn btn-default" data-toggle="dropdown" type="button" title="http://api.hasoffers.com/v3/Affiliate_Offer.json">
<ul class="multiselect-container dropdown-menu" style="max-height: 200px; overflow-y: auto; overflow-x: hidden;">
</div>
</div>

这是完整的脚本

function get_data(v)
{
    var cnt = 'cnt';
    var ctg = 'ctg';
    var api = 'api';
    var nt = 'nt';
    $('#drp_'+cnt).remove(); 
    $('#drp_'+ctg).remove(); 
    $('#drp_'+api).remove(); 
    $('#drp_'+nt).remove();
    $('.btn-group').remove();



    $('#drp_'+cnt+"_loader").show();
    $('#drp_'+ctg+"_loader").show();
    $('#drp_'+api+"_loader").show();
    $('#drp_'+nt+"_loader").show();

    $.post("ajax.php",{'version':v,'func':'get_nt'},
                function(data)
                {
                    $('#drp_'+nt+"_loader").hide();
                    var drp_nt = $('<select />', {
                                     'id'     : 'drp_' + nt,
                                     'name'   : 'drp_' + nt+'[]',
                                     'change' : check_data(),
                                     'multiple': true});
                    for(i=0;i<data.length;i++)
                    {
                            content ="<option value="+data[i].network+">"+data[i].network+"</option>";
                            $(drp_nt).append(content);
                    }
                    $('#cont_drp_'+nt).append(drp_nt);
                    $(drp_nt).multiselect({
                                includeSelectAllOption: true,
                                enableFiltering: true,
                                maxHeight: 200,
                                allSelectedText: 'No option left ...'
                            });
                }, "json");

    $.post("ajax.php",{'version':v,'func':'get_api'},
                function(data)
                {
                    $('#drp_'+api+"_loader").hide();
                    var drp_api = $('<select />', {
                                     'id'     : 'drp_' + api,
                                     'name'   : 'drp_' + api+'[]',
                                     'multiple': true});
                    for(i=0;i<data.length;i++)
                    {
                            content ="<option value="+data[i].api+">"+data[i].api+"</option>";
                            $(drp_api).append(content);
                    }
                    $('#cont_drp_'+api).append(drp_api);
                    $(drp_api).multiselect({
                                includeSelectAllOption: true,
                                enableFiltering: true,
                                maxHeight: 200,
                                allSelectedText: 'No option left ...'
                            });
                }, "json");



    $.post("ajax.php",{'version':v,'func':'get_category'},
                function(data)
                {
                    $('#drp_'+ctg+"_loader").hide();
                    var drp_ctg = $('<select />', {
                                     'id'     : 'drp_' + ctg,
                                     'name'   : 'drp_' + ctg+'[]',
                                     'multiple': true});
                    for(i=0;i<data.length;i++)
                    {
                            content ="<option value="+data[i].category+">"+data[i].category+"</option>";
                            $(drp_ctg).append(content);
                    }
                    $('#cont_drp_'+ctg).append(drp_ctg);
                    $(drp_ctg).multiselect({
                                includeSelectAllOption: true,
                                enableFiltering: true,
                                maxHeight: 200,
                                allSelectedText: 'No option left ...'
                            });
                }, "json");



    $.post("ajax.php",{'version':v,'func':'get_country'},
                function(data)
                {
                    $('#drp_'+cnt+"_loader").hide();
                    var drp_cnt = $('<select />', {
                                     'id'     : 'drp_' + cnt,
                                     'name'   : 'drp_' + cnt+'[]',
                                     'multiple': true});
                    for(i=0;i<data.length;i++)
                    {
                            content ="<option value="+data[i].country+">"+data[i].country+"</option>";
                            $(drp_cnt).append(content);
                    }
                    $('#cont_drp_'+cnt).append(drp_cnt);
                    $(drp_cnt).multiselect({
                                includeSelectAllOption: true,
                                enableFiltering: true,
                                maxHeight: 200,
                                allSelectedText: 'No option left ...'
                            });
                }, "json");
}

2 个答案:

答案 0 :(得分:2)

终于找到了!你必须像这样使用on: {...}

var drp_nt = $('<select />', {
    'id': 'drp_' + nt,
    'name': 'drp_' + nt + '[]',
    on: {
        change: check_data
    },
    'multiple': true
});

var drp_cnt = $('<select />', {
    'id': 'drp_' + cnt,
    'name': 'drp_' + cnt + '[]',
    on: {
        change: check_data
    },
    'multiple': true
});

JQuery documentation

一样

答案 1 :(得分:0)

此功能可以在页面加载时运行,它将捕获之后添加到页面的任何选择元素的更改事件

$(document).on("change", "select", function(){
    // do stuff
});