Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么jQuery中的回调必须是不规则的?_Javascript_Jquery_Jquery Callback - Fatal编程技术网

Javascript 为什么jQuery中的回调必须是不规则的?

Javascript 为什么jQuery中的回调必须是不规则的?,javascript,jquery,jquery-callback,Javascript,Jquery,Jquery Callback,这和预期的一样,但我不喜欢 $('#login-form').on('submit', function(event){ event.preventDefault(); init.login(); }); var init = { login: function() { // do login stuff } }; 这是我想要的,但它不起作用 $('#login-form').on('submit', init.login(event)); var init = {

这和预期的一样,但我不喜欢

$('#login-form').on('submit', function(event){
  event.preventDefault();
  init.login();
});

var init = {
  login: function() {
  // do login stuff
  }
};
这是我想要的,但它不起作用

$('#login-form').on('submit', init.login(event));

var init = {
  login: function(event) {
  event.preventDefault();
  // do login stuff
  }
};

为什么?

它会起作用,您正在调用函数(作为回调函数给出的值将是函数的结果),而不是将其作为值传递

$('#login-form').on('submit', init.login);
init.login(event)
调用函数
init.login
,将(不存在的)变量
event
传递给它。如果要将函数本身作为回调传递,请不要调用它:

$('#login-form').on('submit', init.login);

在传递该函数之前,您必须先声明该函数,此时,
init.login
undefined
您已经在该行中调用了该函数(使用
undefined
,还没有
事件
)。您需要传递函数本身(而不是其结果):


请注意,
init.login
仍然是一个匿名函数,它没有名称:-)还要注意,调用该方法时,
this
是login表单元素,而不是
init
对象。如果需要,可以使用
.on('submit',init.login.bind(init))

它会给出什么错误?我认为你可以传递这个函数,但你做得不对。可能重复和很多others@Bergi可以是。+1,但需要注意的另一件事是,如果在
init.login
内部,您要使用
this
引用
init
的其他属性,那么您还需要添加一个
bind
调用:
$('#login form')。在('submit',init login.bind(init))谢谢!我想我明白了。我把“调用函数”和“显示函数结果”搞混了。但是如何保持事件对象?我需要做些什么?是否有第三个巴黎米(布尔设置为假)我可以使用?或者返回false?没问题,事件对象将传递给您提供的任何函数,因此它仍将传递给您的登录函数,因此事件对象仅在匿名函数中可用?当
.on
调用回调时,它会传递一个参数
.on
的定义如下:
函数on(事件,回调){…回调('foo');…}
。它把你的回调函数作为参数,然后调用你的回调函数,给它传递一个参数。您的回调在它调用的
事件
参数中接收此值。可以根据需要调用此参数。是的,它显然只在
.on
调用它时才在回调中可用。谢谢您提供的详细信息。有点棘手。必须仔细阅读。那么我如何访问事件对象呢?@KarlPokus:它应该是
init.login
函数的参数,即
{login:function(event){/*do login stuff*/}
是的。知道了。效果很好。谢谢
$('#login-form').on('submit', init.login);