[英]JavaScript problem converting strings inside object (inside loop)
在為 Joomla 構建輪播模塊時,我遇到了 2 個 JavaScript 問題,我無法修復。 我已經嘗試了2天。 希望這里有人能指出我做錯了什么。
"0"
或字符串"1"
中得到 boolean而且我不能JSON.parse()
將 object 字符串轉換為 JavaScript ZA8CFDE6331149EB2ACZC96B8情況:
為了能夠在 1 頁上有多個實例,我將每個模塊的單獨設置(通過 php)傳遞給我的 javascript 文件中的 1 object。 每個模塊是 object 內部的 1 個鍵值對,值是它自己的設置 object。 基本上,這是 JS 接收它的方式:
const moduleSettings = {
"103":{"items":3,"margin":5,"loop":"1","center":"0","responsive":"{0:{items:1}}"},
"105":{"items":3,"margin":5,"loop":"0","center":"1","responsive":"{0:{items:2}}"}
};
接下來我需要遍歷每個模塊來初始化設置。 這是使用 jQuery 完成的。
jQuery(document).ready(function() {
// Loop over each module
const modules = Object.keys(moduleSettings);
for (const id of modules) {
const target = "carousel-" + id;
const params = moduleSettings[id];
// Callback to evaluate true/false params
function eval(singleParam) {
return params[singleParam] === "1";
};
// Initialize carousel
jQuery(target).owlCarousel({
items: params.items,
margin: params.margin,
loop: eval("loop"),
center: eval("center"),
responsive: JSON.parse(params.responsive)
});
};
});
輪播屬性items
和margin
是數字。 那里沒問題,但這些從一開始就作為數字接收。
問題:
loop
和center
應該返回一個 boolean,基於回調 function eval()
。 但他們只返回字符串"0"
或"1"
。responsive
屬性應返回 object。 但這仍然是一個字符串 object "{...}"
。控制台錯誤:
上面的第一個問題不會阻止功能。 它有效,但我想了解為什么我的值不是布爾值。
然而,第二個問題會導致控制台錯誤並使輪播無法正常工作。 僅當響應不是空字符串時。 當 responsive 是一個空字符串時,它可以工作。 但我需要響應式設置。
我一直在尋找這個問題的原因 2 天了。 越來越令人沮喪。 任何指針都是最有幫助的。 謝謝!
而不是使用eval
function 你可以在下面使用
jQuery(target).owlCarousel({
items: params.items,
margin: params.margin,
loop: !!params.loop,
center: !!params.center,
responsive: JSON.parse(params.responsive)
});
對於第二個問題,您需要從服務器端代碼更改結構以生成此模塊設置 JSON。 響應式 object 不是正確的 JSON。 它應該像
responsive: {items:1}
或responsive: [{items:1}]
如果您可以發布該代碼,那么我可以告訴您需要在那里進行的更改。
在您提供的示例中,您不是按作為singleParam
參數提供的名稱評估 params 字段,而是實際的params.singleParam
字段,它是undefined
。 要按名稱獲取字段,請使用括號語法: params[singleParam]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.