[英]Javascript callback function throws error “Callback is not a function” in firefox
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謊言調試。
任何建議都會很棒
這是因為您並不總是將回調傳遞給該方法。
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.
}
這是因為您並不總是向CascadeDropDowns
函數提供callback
。
例如
CascadeDropDowns(".ConfigGroupDDL", ".ConfigNameDDL", "GetParameters");
您應該修改函數以將callback
參數視為optionnal參數:
if (callback) {
callback();
}
一個常見的簡寫是:
callback && callback();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.