Javascript回调函数抛出错误“;回调不是一个函数";在firefox中 函数级联下拉列表(父类、子类、操作、回调){ var DropDownId=$(parentClass+“选项:选中”).val(); $.ajax({ url:“/site/”+操作, 数据:{DropDownId:DropDownId}, 数据类型:“json”, 类型:“POST”, 错误:函数(){ 警报(“发生错误”); }, 成功:功能(数据){ var项目=”; $。每个(数据、功能(i、项){ 项目+=“”+项目。文本+“”; }); $(childClass).html(项目); $(子类)[0]。已选择索引=0; 回调(); } }); } $(文档).ready(函数(){ //填充加载时的所有子下拉列表 var callback=函数(){ 级联下拉列表(“.ConfigGroupDDL”、“ConfigNameDDL”、“GetParameters”); }; 级联下拉列表(“.DeviceTypeDDL”、“.ConfigGroupDDL”、“GetGroups”、回调); //填充所有子下拉列表父项更改 $(“.DeviceTypeDDL”).change(函数(){ var callback=函数(){ 级联下拉列表(“.ConfigGroupDDL”、“ConfigNameDDL”、“GetParameters”); }; 级联下拉列表(“.DeviceTypeDDL”、“.ConfigGroupDDL”、“GetGroups”、回调); }); $(“.ConfigGroupDDL”).change(函数(){ 级联下拉列表(“.ConfigGroupDDL”、“ConfigNameDDL”、“GetParameters”); }); });
这运行正常,并以正确的顺序级联下拉列表,但firefox调试器显示错误,ie抛出警报并询问Id是否需要调试Javascript回调函数抛出错误“;回调不是一个函数";在firefox中 函数级联下拉列表(父类、子类、操作、回调){ var DropDownId=$(parentClass+“选项:选中”).val(); $.ajax({ url:“/site/”+操作, 数据:{DropDownId:DropDownId}, 数据类型:“json”, 类型:“POST”, 错误:函数(){ 警报(“发生错误”); }, 成功:功能(数据){ var项目=”; $。每个(数据、功能(i、项){ 项目+=“”+项目。文本+“”; }); $(childClass).html(项目); $(子类)[0]。已选择索引=0; 回调(); } }); } $(文档).ready(函数(){ //填充加载时的所有子下拉列表 var callback=函数(){ 级联下拉列表(“.ConfigGroupDDL”、“ConfigNameDDL”、“GetParameters”); }; 级联下拉列表(“.DeviceTypeDDL”、“.ConfigGroupDDL”、“GetGroups”、回调); //填充所有子下拉列表父项更改 $(“.DeviceTypeDDL”).change(函数(){ var callback=函数(){ 级联下拉列表(“.ConfigGroupDDL”、“ConfigNameDDL”、“GetParameters”); }; 级联下拉列表(“.DeviceTypeDDL”、“.ConfigGroupDDL”、“GetGroups”、回调); }); $(“.ConfigGroupDDL”).change(函数(){ 级联下拉列表(“.ConfigGroupDDL”、“ConfigNameDDL”、“GetParameters”); }); });,javascript,Javascript,这运行正常,并以正确的顺序级联下拉列表,但firefox调试器显示错误,ie抛出警报并询问Id是否需要调试 任何建议都很好,因为您并不总是将回调传递给该方法 function CascadeDropDowns(parentClass, childClass, action, callback) { var DropDownId = $(parentClass + " option:selected").val(); $.ajax({ url: "/site/" + action
任何建议都很好,因为您并不总是将回调传递给该方法
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");
});
});
成功:函数(数据){
var项目=”;
$。每个(数据、功能(i、项){
项目+=“”+项目。文本+“”;
});
$(childClass).html(项目);
$(子类)[0]。已选择索引=0;
if(callback)callback();//调用前请检查。
}
这是因为您并不总是向级联下拉列表
函数提供回调
例如
cascade下拉列表(“.ConfigGroupDDL”,“.confignamedl”,“GetParameters”)代码>
您应该修改函数,将回调
参数视为可选参数:
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.
}
这方面的一个常用缩写是:
if (callback) {
callback();
}
回调未在该范围内定义
。将var callback
更改为window.callback
并查看它是否有效。@Jashwant与scope无关。谢谢,我应该意识到这一点!我觉得“函数参数缺失”会更好,但我知道我很挑剔:)谢谢你的速记!!
callback && callback();