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

时间:2016-09-30 09:36:31

标签: 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未捕获的TypeError:无法读取未定义的属性'trigger'

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

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

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

有人可以解释为什么会这样吗?

3 个答案:

答案 0 :(得分:2)

啊,好的' this在工作中的约束!如果您只提供方法,则不会在表单上调用它,而是在全局对象上调用,如

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

你想要的是什么

submit.call(form)

解决此问题的一种方法:Bind将提交方法添加到表单中:

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

答案 1 :(得分:0)

你的代码是。只需传递对象即可。

<?php
include('connect.php');

$result = $db->prepare("SELECT image FROM info WHERE empid= '". $empid ."'");
$result->bindParam('. $empid .', $empid);
$result->execute();
for($i=0; $rows = $result->fetch(); $i++){

    echo '<img src="images/".$row["image"]." ">';

    echo '<img src="images/".$row["image"]. > ' ;
}
?>

答案 2 :(得分:-1)

如果没有括号,.submit将只是您拥有的jQuery对象的属性。在这种情况下,您的表单。

添加括号实际上会在表单对象上调用.submit()方法。