我调用的函数(使用jQuery)有问题。我的问题是,当我试图在另一个函数中调用一个函数时,第一个函数没有被调用。但是,当我将失败函数的内容放入调用所述失败函数的那个函数中时,代码执行得很好。我将向您展示我正在谈论的内容:
$('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()中时,它们的代码就会执行。但是,当调用此代码中所示的函数时,它无法工作。我考虑过作用域(至少据我所知)无济于事。
非常感谢您的帮助,谢谢!
发布于 2011-05-19 07:27:35
您正在丢失预期的this值,因此submitStart可能会被调用,但不能正常工作。
执行以下操作:
function validateRegister(){
submitStart.call( this );
}在这里,您通过.call()方法调用submitStart方法,该方法在函数实例上可用。
.call()方法允许您在要调用的函数中手动设置this的值。
因此,因为您已经将validateRegister指定为处理程序,所以jQuery将确保this的值是您的元素。但由于validateRegister调用的是另一个函数,因此它有责任确保该函数具有正确的this值。
只需记住,当您调用任何这样的函数时:
someFunction();该函数中this的...the值将为window,除非您手动将其设置为其他值。
发布于 2011-05-19 07:27:05
var $this = $(this);正在返回窗口。
发布于 2011-05-19 07:27:34
这里的问题是this。当您使用validateRegister作为事件处理程序时,jQuery会自动确保this引用调度事件的DOM元素。但是当您调用单独的函数时,作用域设置不正确,因此this可能引用window对象(当您在全局作用域中引用this时,这是默认的)。要修复它,最简单的方法是将元素作为参数传递:
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的值。
https://stackoverflow.com/questions/6052085
复制相似问题