Javascript插件在Wordpress中附加重复数据

时间:2015-03-17 01:40:16

标签: javascript jquery wordpress advanced-custom-fields

我正在使用名为curry.js的货币转换插件,该插件使用引导标签和高级自定义字段在custom Wordpress page上调用。

当WP循环遍历每个标签时,它会附加到货币列表中,这样当您在第三个标签中打开下拉列表时,您会看到重复三次的货币列表。

以下是每次运行代码curry.js的部分:

var generateDDM = function( rates ){

        output = '';

        // Change all target elements to drop downs
        dropDownMenu.each(function(){

            for (var i in rates ) {

                rate = rates[i];

                output += '<option value="'+ i +'" data-rate="'+ rate +'">' + i + '</option>';

            }

            $( output ).appendTo( this );

        });

    };

我尝试在该代码块之外创建一个counter变量,以便在它运行一次并创建货币列表后,它将该列表存储在一个不再是全局output变量中附加,但无济于事。

如果需要进一步澄清,我很乐意提供 - 任何帮助都会很棒我花了很多时间试图解决这个问题,我知道这应该是一个非常简单的解决方案。

谢谢!

2 个答案:

答案 0 :(得分:1)

使用简单的if语句解决这个问题,在每个WP循环之后检查输出变量的长度:

dropDownMenu.each(function(){
  if(output.length < 251) {
    for ( var i in rates ) {
      rate = rates[i];          
        output += '<option value="'+ i +'" data-rate="'+ rate +'">' + i + '</option>';
    }
    $( output ).appendTo( this );
  }
  else {
    $( output ).appendTo( this );
  }
});

答案 1 :(得分:0)

在javascript中,代码是异步执行的,这意味着无法保证第二行代码只在第一行代码执行后才能执行。也许这就是counter变量值对全局output变量不可见的原因。有关更多信息,请参阅这篇精彩的文章Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference