首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么当函数被调用时,函数的内容会加载,而函数却不会加载?

为什么当函数被调用时,函数的内容会加载,而函数却不会加载?
EN

Stack Overflow用户
提问于 2011-05-19 07:13:34
回答 5查看 97关注 0票数 2

我调用的函数(使用jQuery)有问题。我的问题是,当我试图在另一个函数中调用一个函数时,第一个函数没有被调用。但是,当我将失败函数的内容放入调用所述失败函数的那个函数中时,代码执行得很好。我将向您展示我正在谈论的内容:

代码语言:javascript
运行
复制
$('form.register .submit').click(validateRegister);

function submitStart() {

    var $this = $(this);
    $this.parent().addClass('processing');

    var $processing = $('#processing');
    $processing.show();

    var $endNote = $this.parent().find('#endNote')
    $endNote.slideDown();

}

function validateRegister(){

    submitStart();

}

看,当submitStart()的内容被放到validateRegister()中时,它们的代码就会执行。但是,当调用此代码中所示的函数时,它无法工作。我考虑过作用域(至少据我所知)无济于事。

非常感谢您的帮助,谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-19 07:27:35

您正在丢失预期的this值,因此submitStart可能会被调用,但不能正常工作。

执行以下操作:

代码语言:javascript
运行
复制
function validateRegister(){

    submitStart.call( this );

}

在这里,您通过.call()方法调用submitStart方法,该方法在函数实例上可用。

.call()方法允许您在要调用的函数中手动设置this的值。

因此,因为您已经将validateRegister指定为处理程序,所以jQuery将确保this的值是您的元素。但由于validateRegister调用的是另一个函数,因此它有责任确保该函数具有正确的this值。

只需记住,当您调用任何这样的函数时:

代码语言:javascript
运行
复制
someFunction();

该函数中this的...the值将为window,除非您手动将其设置为其他值。

票数 4
EN

Stack Overflow用户

发布于 2011-05-19 07:27:05

var $this = $(this);正在返回窗口。

票数 0
EN

Stack Overflow用户

发布于 2011-05-19 07:27:34

这里的问题是this。当您使用validateRegister作为事件处理程序时,jQuery会自动确保this引用调度事件的DOM元素。但是当您调用单独的函数时,作用域设置不正确,因此this可能引用window对象(当您在全局作用域中引用this时,这是默认的)。要修复它,最简单的方法是将元素作为参数传递:

代码语言:javascript
运行
复制
function submitStart(element) {

    var $this = $(element);
    $this.parent().addClass('processing');

    var $processing = $('#processing');
    $processing.show();

    var $endNote = $this.parent().find('#endNote')
    $endNote.slideDown();

}

function validateRegister(){
    // "this" is the DOM element
    submitStart(this);
}

正如@Andrew所指出的,您还可以在submitStart中使用submitStart函数的the .apply() method来设置this的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6052085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档