-1

当我想在嵌套语句中引用“this”时会发生什么,它使用哪个“this”?

这是一个例子来说明我上面的意思:

    $("input").blur(function(){
            var theThis = $(this);
            if(!($(".invalid").length > 0)){
                //if there's no messages already open
                theThis.data("validator").checkValidity();
            }else{
                //add the message to the next to be displayed
                nextToAlert.push(theThis);
                //bind an event to the errored field being changed
                $(".invalid").on("change", function(){
                    var me = $(this);
                    if(!me.hasClass('invalid')){
                        nextToAlert.pop().checkValidity();

                    }
                });
            }
    });
4

3 回答 3

1

Javascript 使用函数作用域: 的值this取决于包含它的最内层函数的调用方式。调用object.method()时,this方法内部的值为object; 如果你打电话function(),的价值thiswindow。您还可以this通过调用设置为任意值function.call(thisValue)。当函数是回调时,取值this完全取决于调用它的代码,因此您的主要信息来源应该是 jQuery 文档。但通常 jQuery 会设置this为动作发生的 DOM 元素。例如, in$('.foo').on('click', myFunc)的值将是捕获点击的元素,因为它将是集合中的当前元素,依此类推。thismyFunc$('.foo').each(myFunc)$(this)然后用于将 DOM 元素转换为 jQuery 元素。

于 2012-08-15T09:14:51.350 回答
1

阅读这篇文章以更好地理解$(this)。作为一个简单的(并非总是正确的,但在 99% 的情况下)规则:$(this)将引用当前执行上下文中的相关元素(DOM 文档中的当前位置)。

在您的示例中:

  • theThis将是(当前)$("input")
  • me将是(当前)$(".invalid")
于 2012-08-15T08:57:25.297 回答
1

在您的代码中:

  • theThis$("input")
  • me逆转为$(".invalid")

$(this)将始终根据当前范围而变化。

当您使用任何类型的动作绑定函数时,例如bluronbindlive等,那么$(this)将引用事件绑定到的当前 jQuery 对象。

于 2012-08-15T08:59:37.543 回答