代码之家  ›  专栏  ›  技术社区  ›  CraZyDroiD

在for循环中向函数传递值不起作用

  •  0
  • CraZyDroiD  · 技术社区  · 5 年前

    我正在从json文件映射货币,并将映射的货币呈现给组件。我有一个这样的.php文件

    <div class="currency-switch-container" id="currency_container">
        <span style="font-size:12px;font-weight:bold">All currencies</span>
        <div id="currency-map" style="margin-top:15px"></div>
    </div>
    

    我在js文件中引用上述组件中的div,如下所示

    let currencyMap = jQuery("#currency-map");
    

    当我的jQuery文档准备就绪时,我将执行以下操作

    jQuery(document).ready(function($) {
      $.getJSON('wp-content/themes/mundana/currency/currency.json', function(data) {
        for(let c in data){
          currencyMap.append(`<span onclick="onCurrencyClick(${data[c].abbreviation})"
          class="currency-item">
            <span>
               ${data[c].symbol}
            </span>
            <span>
              ${data[c].currency}
            </span>
          </span>`)
        }
    });
    
    }
    

    我的功能是这样的

    function onCurrencyClick(val){
      console.log("val",val);
      setCookie("booking_currency", val, 14);
    }
    

    这里函数不起作用。但如果我不向函数传递任何东西,它似乎会起作用,因为我可以在终端中看到日志。

    3 回复  |  直到 5 年前
        1
  •  1
  •   Ranjeet Singh    5 年前

    嗨,你的表达式${data[c].exparency}将把值放入没有字符串引号的函数字符串中,即结果为 onCurrencyClick(abbreviation) 虽然它应该是 onCurrencyClick('abbreviation') . 请改用onclick=“onCurrentClick('${data[c].re缩略语}')”。

        2
  •  1
  •   Emiel Zuurbier doctorlee    5 年前

    而不是使用内联 onclick ,使用 活动代表团 。这意味着您有一个单一的事件侦听器来处理来自子代和孙辈的所有事件。修改很小,见下面的例子。

    这样做的一个原因是你将JavaScript保存在JS文件中。像现在一样,你遇到一个JS错误,必须在HTML中查找它。这可能会让人非常困惑。然而,内联 onclick 听众是有效的,他们是过时的,应该避免,除非绝对没有其他方法。将其与使用进行比较 !important 在CSS中,情况也是如此。

    function onCurrencyClick(event){
      var val = $(this).val();
      setCookie("booking_currency", val, 14);
    }
    
    currencyMap.on('click', '.currency-item', onCurrencyClick);
    

    此示例采用 val 你试图从 value 单击的属性 .current-item . <span> 元素没有这样的属性,但 <button> 确实如此,并且是一个更适合与之交互的元素。通常,将可点击元素用于点击等目的是一种很好的做法。

    在下面的示例中,您可以看到正在使用的按钮和 abbreviation 输出值在 价值 属性 <按钮> 元素,可以从中读取 onCurrencyClick 功能。

    jQuery(document).ready(function($) {
      $.getJSON('wp-content/themes/mundana/currency/currency.json', function(data) {
        for(let c in data){
          currencyMap.append(`
            <button value="${data[c].abbreviation}" class="currency-item">
              <span>
                ${data[c].symbol}
              </span>
              <span>
                ${data[c].currency}
              </span>
            </button>
          `)
        }
    });
    
        3
  •  0
  •   Dickens A S    5 年前

    onclick 不适用于动态添加的div标签

    你应该遵循jQuery on 事件

    请参考: jQuery on
    堆栈溢出参考: Dynamic HTML Elements