Ric*_*one 13 javascript jquery
我有一个javascript函数,它检查XML文件中是否存在艺术家:
function artistExists(artist) {
// get data from artists.xml
$('.loading').show();
$.get(artists_xml, function(xml){
$('.loading').hide();
$(xml).find('artist').each(function(){
if ($(this).find("ar_artist").text() == artist.val()) {
alert ('artist exists');
return true;
} //end if
}); // end each
alert ('artist does not exist');
return false;
}); // end .get function
} // end of artistExists function
Run Code Online (Sandbox Code Playgroud)
我是否正确地认为'return true'行应该退出函数的执行?我以为会这样,但是在找到记录并运行第一个警报后,执行继续到底部的故障警报.
我做错了什么?谢谢.
Poi*_*nty 16
是的,它确实"退出"了该功能的执行.问题是,"哪个功能?" 在这种情况下,答案应该非常明确:它是传递给的函数.each().
您可以.each()通过返回false而不是返回来终止循环行为true,但仍然不会让您退出外部函数.你应该考虑的是在外部函数中设置一个局部变量,并在找到内容时设置内部函数(然后打破.each()循环).然后main函数可以检查局部变量以查看它是否已设置.
这是一个我真的想使用.reduce()或.inject()API的情况,但jQuery没有,他们真的反对它.
T.J*_*der 15
返回false,而不是true终止each循环; 来自文档:
我们可以通过返回来停止回调函数中的循环
false.
但这将终止你的each循环,而不是整体功能.你需要设置一个标志,以便你知道你是否找到了一些东西,例如:
function artistExists(artist) {
// get data from artists.xml
$('.loading').show();
$.get(artists_xml, function(xml){
var found = false; // <== Added
$('.loading').hide();
$(xml).find('artist').each(function(){
if ($(this).find("ar_artist").text() == artist.val()) {
alert ('artist exists');
found = true; // <== Added
return false; // <== Modified
} //end if
}); // end each
if (!found) { // <== Added
alert ('artist does not exist');
} // <== Added
return found; // <== Modified
}); // end .get function
} // end of artistExists function
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18677 次 |
| 最近记录: |