2013-04-09 22 views
14
function CascadeDropDowns(parentClass, childClass, action, callback) { 
    var DropDownId = $(parentClass + " option:selected").val(); 

    $.ajax({ 
    url: "/site/" + action, 
    data: { DropDownId: DropDownId }, 
    dataType: "json", 
    type: "POST", 
    error: function() { 
     alert("An error occurred."); 
    }, 
    success: function (data) { 
     var items = ""; 
     $.each(data, function (i, item) { 
     items += "<option value=\"" + item.Value + "\">" + item.Text + "</option>"; 
     }); 
     $(childClass).html(items); 
     $(childClass)[0].selectedIndex = 0; 
     callback(); 
    } 
    }); 
} 

$(document).ready(function() { 
    // Populates all child drop downs on load 
    var callback = function() { 
    CascadeDropDowns(".ConfigGroupDDL", ".ConfigNameDDL", "GetParameters"); 
    }; 

    CascadeDropDowns(".DeviceTypeDDL", ".ConfigGroupDDL", "GetGroups", callback); 

    // Populates all child drop downs parent change 
    $(".DeviceTypeDDL").change(function() { 
    var callback = function() { 
     CascadeDropDowns(".ConfigGroupDDL", ".ConfigNameDDL", "GetParameters"); 
    }; 
    CascadeDropDowns(".DeviceTypeDDL", ".ConfigGroupDDL", "GetGroups", callback); 
    }); 
    $(".ConfigGroupDDL").change(function() { 
    CascadeDropDowns(".ConfigGroupDDL", ".ConfigNameDDL", "GetParameters"); 
    }); 
}); 

Bu iyi çalışır ve çağlayan doğru sırada Açılır menülerde, ancak firefox ayıklayıcı hata gösteriyor ve yani bir uyarı atar içinde "geri arama bir işlev değil" ve isterse debug Kimliği dokunuşlar .JavaScript geri çağırma işlevi hata atar firefox

Herhangi bir tavsiye her zaman bu yöntemle içine geri arama geçmezken, çünkü öyle

+0

'geri arama tanımlı değil

CascadeDropDowns(".ConfigGroupDDL", ".ConfigNameDDL", "GetParameters");

Bir -Optionnal argüman olarak callback argüman tedavi etmek için işlevini değiştirmek gerekir bu kapsamı. 'Var callback' öğesini 'window.callback' olarak değiştirin ve işe yarayıp yaramadığını görün. – Jashwant

+0

@Jashwant Kapsam ile ilgisi yoktur. – epascarello

cevap

34

çok iyi olurdu. her zaman bir callbackCascadeDropDowns işlevine sağlamıyor çünkü

success: function (data) { 
    var items = ""; 
    $.each(data, function (i, item) { 
    items += "<option value=\"" + item.Value + "\">" + item.Text + "</option>"; 
    }); 
    $(childClass).html(items); 
    $(childClass)[0].selectedIndex = 0; 
    if(callback) callback(); //check before calling it. 
} 
+1

Teşekkürler, bunu anladım! – DavidB

20

öyle.

E.g.

if (callback) { 
    callback(); 
} 

bunun için ortak bir kısaltmasıdır:

callback && callback(); 
+1

Shorthand için teşekkürler! – Edgar

İlgili konular