簡體   English   中英

JavaScript 問題在 object 內轉換字符串(循環內)

[英]JavaScript problem converting strings inside object (inside loop)

在為 Joomla 構建輪播模塊時,我遇到了 2 個 JavaScript 問題,我無法修復。 我已經嘗試了2天。 希望這里有人能指出我做錯了什么。

  1. 我無法從字符串"0"或字符串"1"得到 boolean而且我不能
  2. 而且我不能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)
        });

    };

});

輪播屬性itemsmargin是數字。 那里沒問題,但這些從一開始就作為數字接收。

問題:

  1. 屬性loopcenter應該返回一個 boolean,基於回調 function eval() 但他們只返回字符串"0""1"
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM