javascript - 无法将 jQuery object.method 传递给另一个要执行的函数

标签 javascript jquery

我有以下 JavaScript:

function MyMethod(func)
{
  func();
}

$('#Btn').on('click', function(e)
{
  e.preventDefault();

  var form = $(this).parent();

  MyMethod(form.submit);
});

http://codepen.io/chrisnicholson/pen/YGxOdJ

这不起作用,在 Chrome 中出现以下错误:

jquery.min.js:4 未捕获类型错误:无法读取未定义的属性“触发器”

如果我修改对 MyMethod 的调用以使用以下内容,则它可以工作:

MyMethod(function(){
  form.submit();
});

http://codepen.io/chrisnicholson/pen/amyRXX

谁能解释一下这是为什么吗?

最佳答案

啊,this 的绑定(bind)效果很好!如果您只提供方法,则不会在表单上调用它,而是在全局对象上调用它,例如

submit.call(window) // resp. undefined in strict mode. Hence the error, I guess.

你想要的在哪里

submit.call(form)

解决此问题的一种方法:Bind表单的提交方法:

MyMethod(form.submit.bind(form));

关于javascript - 无法将 jQuery object.method 传递给另一个要执行的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39788318/

相关文章:

javascript - HTML + javascript 鼠标悬停、鼠标移出、onclick 在 Firefox 中不起作用

javascript - 对话框在视口(viewport)外打开

javascript - 如何在本地存储中的页面刷新时显示图像

android - 如何在使用 phonegap 的 Android 应用程序中的 jquery 组合框中使用动态源

Javascript更改服务器给我的时间以匹配另一个时区

javascript - 将 Canvas 放在屏幕中央

javascript - 只能更新已安装或正在安装的组件。找不到错误

javascript - 如何将 Django 的 CSRF token 添加到 jQuery POST 请求的 header 中?

jquery - Kendo UI - MultiSelect 替换从外部文件动态创建的数据源

javascript - 如何根据封面照片的 div 高度和位置调整图像大小?