【问题标题】:JQuery click handler only anonymous function allowedJQuery 点击处理程序只允许匿名函数
【发布时间】:2020-03-21 01:57:42
【问题描述】:

似乎在 jquery 点击事件中你只能传递匿名函数。无法传递正常的 javascript 函数。这会导致我的代码出现问题。

function funcCancelClose(testcaseId,update)
{
   if(update == false)
   {
        modalCloseCancel(testcaseId);
   }
   else
   {
        modalCloseCancelUpdate(testcaseId, $("#radio-previous_"+testcaseId).val());
   }
}

var testcaseId = 891;
var update = false;

$("#modalCancel,#modalClose").click(funcCancelClose(testcaseId,update));

这不起作用。即使开发者控制台中没有错误消息,代码的行为也是错误的

【问题讨论】:

  • 您是在立即调用函数,而不是在点击发生时传递要调用的函数。
  • 好的,那么当点击发生时调用它的语法是什么?
  • 是的,你是对的,它会立即被调用。那当然是错的
  • 如果我将它作为普通函数传递它会被执行很有趣,但如果我将它作为匿名函数传递它不会立即执行。为什么会这样?

标签: jquery


【解决方案1】:

你写的是立即调用funcCancelClose(),并将其值作为参数传递给click()

您可以使用匿名函数或使用bind() 函数。

$("#modalCancel,#modalClose").click(function() {
    funcCancelClose(testcaseId,update);
});

$("#modalCancel,#modalClose").click(funcCancelClose.bind(null, testcaseId,update));

【讨论】:

  • 啊哈好吧。所以我仍然不明白为什么普通函数会立即执行,而匿名函数却不会。但只是我认为这只是 Jquery 实现。对吧?
  • 我怎么能在普通的javascript函数上调用bind。什么是参数 null 。是的,这行得通。谢谢。
  • 这就像console.log(1+2)console.log(function() { return 1+2; }) 之间的区别。函数表达式只是创建一个函数,它不执行它。
  • .bind() 的第一个参数是函数中要赋予this 的值。这是null,因为您的函数不使用this
【解决方案2】:

像这样在 html attr 中获取值

<span id="modalCancel" data-attr-testcaseId="1" data-attr-update="0"><span>
$("#modalCancel").click(funcCancelClose);
function funcCancelClose(){ console.log($(this).attr('data-attr-testcaseId')); };

【讨论】:

  • 好的。所以我必须使用一个技巧来随心所欲地使用它。我必须使用一个假的 html 元素并将我的值放在那里。嗯……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多