我正在使用名为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
变量中附加,但无济于事。
如果需要进一步澄清,我很乐意提供 - 任何帮助都会很棒我花了很多时间试图解决这个问题,我知道这应该是一个非常简单的解决方案。
谢谢!
答案 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