HTML:ローカル変数が親関数の入力パラメータである場合にのみ、コールバック関数でローカル変数にアクセスできるのはなぜですか?
<div id="header" p-include="components/header.htm" p-param="{'lblCurPos':'User Profile Page'}"></div>
<!--Other mark up here-->
<div id="footer" p-include="components/footer.htm" p-param="{'lblScreenID':'SYS-027'}"></div>
JSコード:
/*Replace div that has p-include attr */
$(window).on('load',function() {
$("div[p-include]").each(
function() {
p_include_replace(this);
//p_include_replace2(this);
}
);
});
//this works
function p_include_replace(obj) {
//load html fragment
$(obj).load($(obj).attr("p-include"), function(){
//parse param
param = JSON.parse($(obj).attr("p-param").replace(/'/g, '"'));
jQuery.each(param, function (k, val) {
$("#" + k).html(val);
});
});
}
//this doesn't work
function p_include_replace2(obj) {
//parse param
param = JSON.parse($(obj).attr("p-param").replace(/'/g, '"'));
//load html fragment
$(obj).load($(obj).attr("p-include"), function(){
jQuery.each(param, function (k, val) {
$("#" + k).html(val);
});
});
}
p_include_replace2
実行load
コールバック関数の時に、ローカル変数param
が上書きされるとするためのパラメータを含んでいるので、ヘッダーのために動作しませんフッター。
しかし、p_include_replace
はなぜ機能していますか?両方とも親関数のローカル変数である場合、コールバック関数でobj
/param
を使用するのはなぜ違うのですか?
20170413編集:
明確にするために、私は次のようにコードを変更する必要があり:
/*Replace div that has p-include attr */
$(window).on('load',function() {
$("div[p-include]").each(
function() {
p_include_test(this);
}
);
});
function p_include_test(obj) {
param = obj.id + "param"
console.log("Parent:" + obj.id);
console.log("Parent param:" + param);
$(obj).load($(obj).attr("p-include"), function(){
console.log("Callback:" + obj.id);
console.log("Callback param:" + param);
});
}
、結果は以下の通りです:
両方param
とobj
コールバックの外側で変更されました。なぜobj
に2つのdiffeコールバックの値を正しくレンタルしますが、param
は正しくありませんか?
あなたの最新の追加例はあなたの問題を示しています: 'var'を使わずに' param'を使って、グローバル変数にしています。だから、あなたはそれをグローバルに変更して、他のループに影響を与えます。 – devnull69
@ devnull69私の2番目のメソッドに 'var'を追加しました。したがって、 'param'は実際にはグローバル変数でした。私は今、それを得る、ありがとう! – jack3694078