我有以下代码在悬停时返回中文单词的英文翻译。
//return Chinese/English words from database
$("#npc_dialog span").on("mouseover", function() {
var word = $(this).text();
$("#currentWord").text(parseHoveredText(word));
}).on("mouseout", function() {
$("#currentWord").empty();
});
它适用于for循环:
function parseHoveredText (word) {
for (vocab in hoveredWords) {
if(word.toLowerCase() === vocab) {
return hoveredWords[vocab];
}
}
};
但如果我使用jQuery $.each
则不行。
function parseHoveredText (word) {
$.each(hoveredWords, function(key, value) {
if(word.toLowerCase() === key) {
return value;
}
});
};
在这两种情况下,返回值的console.log()
都会产生相同的值。为什么jQuery不起作用?
在for循环中:
console.log(hoveredWords[vocab]);
提供:You
在jQuery $ .each中:
console.log(value);
提供:You
答案 0 :(得分:3)
这是因为你有一个匿名函数,当你从每个回调函数返回value
而不是parseHoveredText
方法时。
function parseHoveredText (word) {
var val;
$.each(hoveredWords, function(key, value) {
if(word.toLowerCase() === key) {
val =value;
//return false to prevent any further iterations
return false;
}
});
return val;
};
但从它的外观来看,它应该像
一样简单function parseHoveredText (word) {
return hoveredWords[word.toLowerCase()];
};
答案 1 :(得分:1)
每个语句中的return
语句将结束each
循环,而不是从函数返回值。您需要返回false
才能完成for循环而不是返回值。在从each
函数返回并从函数parseHoveredText
function parseHoveredText (word) {
var result = "";
$.each(hoveredWords, function(key, value) {
if(word.toLowerCase() === key) {
result = value;
return false;
}
});
return result;
};