如果满足某个条件,我会尝试从事件处理函数中提前返回(如果所选的id
已经在我的问题列表中。)
但是我没有看到我期望的结果。
当条件满足时,我得到“我应该回复”的消息,但我也得到了“我还在这儿吗?”信息。这仍然允许其余代码在此函数中执行。
my.test.on('click', '.question-tagging .add-question-type', function() {
var questionIds = getSelectedQuestionIds();
console.log("questionIDs = " + questionIds);
var currentQuestions = $.each($('.question-list .question-item'), function () {
console.log("Question ID = " + $(this).find('.remove-tag').data('questionid'));
if (questionIds == $(this).find('.remove-tag').data('questionid'))
{
console.log("I should return");
return;
}
});
console.log("did i still go here?");
// more code...
});
答案 0 :(得分:1)
如您所见,从each()
返回,并非从click
处理程序返回。如果您放弃each()
进行简单的for
循环,则可以获得所需内容:
my.test.on('click', '.question-tagging .add-question-type', function() {
var questionIds = getSelectedQuestionIds();
console.log("questionIDs = " + questionIds);
var currentQuestions = $('.question-list .question-item');
for ( var i = 0; i < currentQuestions.length; ++i )
{
var q = $(currentQuestions[i]);
console.log("Question ID = " + q.find('.remove-tag').data('questionid'));
if (questionIds == q.find('.remove-tag').data('questionid'))
{
console.log("I should return");
return;
}
}
console.log("did i still go here?");
// more code...
});
答案 1 :(得分:0)
return
只会停止执行它所执行的功能。在你的情况下,它会停止执行循环,但不会停止外部点击处理功能。您可以使用布尔标志来确定是否应继续使用外部函数,如下所示:
my.test.on('click', '.question-tagging .add-question-type', function() {
var questionIds = getSelectedQuestionIds();
console.log("questionIDs = " + questionIds);
var shouldContinue = true; //set up a flag
var currentQuestions = $.each($('.question-list .question-item'), function () {
console.log("Question ID = " + $(this).find('.remove-tag').data('questionid'));
if (questionIds == $(this).find('.remove-tag').data('questionid'))
{
console.log("I should return");
shouldContinue = false; //flip the flag to false
return;
}
});
if( shouldContinue ) //only continue if condition wasn't met
{
console.log("did i still go here?");
// more code...
}
});
答案 2 :(得分:0)
您必须使用return false
来突破$.each
循环。但是,这只会中断循环回调,控件将返回到click
处理程序函数。
如果您希望早日从该函数返回,则需要return
处理程序中的另一个click
语句。