Функция обратного вызова Javascript вызывает ошибку "Обратный звонок не является функцией" в 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 liek отлаживаться.
Любые советы были бы хороши
Ответы
Ответ 1
Это потому, что вы не всегда передаете обратный вызов в этот метод.
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.
}
Ответ 2
Это потому, что вы не всегда предоставляете callback
функции CascadeDropDowns
.
например.
CascadeDropDowns(".ConfigGroupDDL", ".ConfigNameDDL", "GetParameters");
Вы должны изменить свою функцию для рассмотрения аргумента callback
в качестве аргумента optionnal:
if (callback) {
callback();
}
Общим сокращением является следующее:
callback && callback();