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

に「コールバック関数ではありません」これは罰金、右の順にカスケードドロップダウンを実行しますが、Firefoxのデバッガはエラーを示し、すなわち、警告をスローし、デバッグする場合は、id liekを尋ねます。Javascriptのコールバック関数がエラーをスローFirefoxの

何かアドバイスは、あなたが常にそのメソッドにコールバックを渡していないので、それがある

+0

'コールバックはで定義されていない

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

あなたはoptionnal引数としてcallback引数を処理するために、あなたの関数を変更する必要がありますその範囲 '。 'var callback'を' window.callback'に変更し、それが動作するかどうか確認してください。 – Jashwant

+0

@Jashwantスコープとは関係ありません。 – epascarello

答えて

34

素晴らしいことです。

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

ありがとう、私はそれを実現する必要があります! – DavidB

20

あなたは常にCascadeDropDowns機能にcallbackを提供していないからです。

など。

if (callback) { 
    callback(); 
} 

そのための共通の省略形は次のとおりです:

callback && callback(); 
+1

すみません、ありがとう! – Edgar

関連する問題