2014-12-04 70 views
1

我正在創建兩個dropsdowns這樣設置使用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}); 

現在我定義這樣

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

的check_data_function但問題是設置onchange事件動態創建的下拉列表中,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"); 
} 
+0

可能重複(http://stackoverflow.com/questions/203198/event-binding -on-dynamic-created-elements) – Balachandran 2014-12-04 10:15:38

+0

你有沒有看到你的prev後的問題,我給了那個http://stackoverflow.com/questions/27290755/how-to-check-if-all-the-four-multiselect-有一些價值選擇 – Balachandran 2014-12-04 10:19:15

+0

我想知道,爲什麼它不以我的格式工作...我知道這種方式它的工作原理...可能是一些錯誤,它不工作... – Saswat 2014-12-04 10:22:24

回答

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

0

此功能可以在頁面加載運行,它會趕上添加到頁面之後的任何選擇要素的變化情況

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

我希望它在創建下拉列表中設置...你說的意思是,創建後,我需要設置功能。我不會給你這個投票,但真的很差的答案 – Saswat 2014-12-04 10:13:04

+0

對不起,我應該更好地解釋。此方法應處理在運行後添加到文檔*中的任何未來選擇的更改事件。添加下拉列表後,您不需要運行它。 – roryok 2014-12-04 10:17:58