我花了很多时间来解决这个问题,但没有找到任何东西,
function constructAgenciesData() {
$.ajax({
url: "getAgenciesAndGlobalJson.do",
dataType: "json",
success: function(data){
$.each(data, function (index, row) {
// console.log("data : "+ JSON.stringify(data));
$("#"+row.id).data("assignedAgencies", row.assignedAgencies).data("restOfAgencies", row.restOfAgencies).data("global", row.global).data("globalID", row.globalID);
});
}
});
}
constructAgenciesData();
$(function($){
$(".globalswitch").each(function () {
var idRow = $(this).parents('tr')[0].id;
alert(idRow);
console.log($('#'+idRow).data("global"));// <-- UNDEFINED
$(this).switchButton({
checked: row.data("global")
});
});
$(document).on('click','button.btn', function () {
var idRow = $(this).parents('tr')[0].id;
var title = $(this).parents('td:first').siblings(':eq(1)').text();
title = "Rule Name : " + title;
$("#divPopUp").data('param_1', idRow);
$("#divPopUp").data('opener', this).dialog("option", "title", title).dialog("open");
console.log($('#'+idRow).data("global"));// <-- WORKING
var old_array = $('#'+idRow).data("restOfAgencies");
var new_array = $('#'+idRow).data("assignedAgencies");
addCheckbox(diff(old_array,new_array));
});
});
我不知道为什么会这样:
console.log($('#'+idRow).data("global"));
在.each
函数中未定义。
但它正在点击功能中工作。
答案 0 :(得分:0)
您的$.ajax
电话是异步的。这意味着在正在运行Javascript
的其余部分时它正在触发请求。
success
中的constructAgenciesData()
功能可能尚未在IIFE $(function($){
之前完成。
因此,无法保证在.data('global')
循环中尝试访问$(".globalswitch").each
时设置$(".globalswitch").each
。
此问题的解决方案是将globalSwitchLoop()
循环包含在函数$.ajax
中,并在{{1}}调用成功时触发该循环。
另外,请查看jQuery's promises
。