Javascript函数“返回此”不起作用

时间:2013-04-26 04:05:06

标签: javascript jquery

我有以下功能,它只是运行一个对象列表并返回正确的一个:

function findLine(textElement,caretIndex){
    jQuery.each(textElement.lines(), function() {
        if(this.startIndex <= caretIndex && this.endIndex >= caretIndex) {
            alert(this);
            return this;
        }
   });
}

当我用它调用它时,我得到undefined作为回报。

line = findLine(textElement,caretIndex);
alert(line);

奇怪的是,当我运行line = findLine(textElement,caretIndex);时,函数内的警报被触发并返回正确的结果。所以this是正确的值,但是当函数外的第二个警报被触发时,我得到undefined

当我从函数返回值时,或者将该值赋给变量时,会发生错误。我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

问题是您return this方法正在回调jQuery.each方法,而您的findLine不会返回任何内容。

function findLine(textElement,caretIndex){
    return jQuery.each(textElement.lines(), function() {
        if(this.startIndex <= caretIndex && this.endIndex >= caretIndex) {
            alert(this);
            return this;
        }
   });
}

如果您return调用jQuery.each,您最终会得到一个包含您想要的每个this的jQuery对象。

答案 1 :(得分:1)

来自.each()上的jQuery文档:

  
    

我们可以通过使回调函数返回false来在特定迭代中中断$ .each()循环。返回非false与for循环中的continue语句相同;它将立即跳到下一次迭代。

  

因此,return this语句基本上是continue语句,因为this是非假的。改变你的功能可能会有效(未经测试......并且可能使用比.each()更好的函数,例如.filter()或.grep()):

function findLine(textElement,caretIndex){
    var result;
    jQuery.each(textElement.lines(), function() {
        if(this.startIndex <= caretIndex && this.endIndex >= caretIndex) {
            alert(this);
            result = this;
            return false; // returning false in the callback just causes the loop to exit
        }
   });

   return result;
}