2013-04-09 21 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"); 
    }); 
}); 

Questo funziona benissimo e cascate menu di scorrimento nel giusto ordine, ma firefox debugger mostra un errore e cioè lancia un avviso e chiede se Id liek per eseguire il debug .funzione di callback JavaScript genera un errore "richiamata non è una funzione" in Firefox

Tutto il consiglio sarebbe grande

+0

'richiamata non è definito in tale ambito ». Cambia 'var callback' a' window.callback' e verifica se funziona. – Jashwant

+0

@Jashwant Non ha nulla a che fare con l'ambito. – epascarello

risposta

34

E 'perché non si è sempre passa la richiamata in quel metodo.

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

Grazie, avrei dovuto rendermene conto! – DavidB

20

E 'perché non stanno fornendo sempre un callback alla funzione CascadeDropDowns.

E.g.

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

Si dovrebbe modificare la funzione per trattare l'argomento callback come argomento Optionnal:

if (callback) { 
    callback(); 
} 

Una scorciatoia comune di ciò è:

callback && callback(); 
+1

Grazie per la stenografia !! – Edgar

Problemi correlati