【问题标题】:Calling custom functions on click (javascript / jquery)单击时调用自定义函数(javascript / jquery)
【发布时间】:2019-01-30 11:08:22
【问题描述】:

我是初学者,在调用我在 JavaScript 或 jQuery 上创建的函数时遇到问题。

如果我使用它,它可以工作:

$("#objectId").click(function(){
    alert("Clicked on objectId")
}

但是,如果我预定义一个函数并在单击时调用它,它就不起作用

function alertOnClick(objectToClick) {
    alert("Clicked on " + objectToClick)
}
$("#objectId").click(alertOnClick("objectId"))

在这种情况下,它会在页面加载时发出警报,而不是在点击时发出警报。

我在语法方面做错了什么,为什么?

非常感谢

【问题讨论】:

  • 函数内应该是$("#objectId").click(function() { alertOnClick("objectId") })$("#objectId").click(alertOnClick)alert("Clicked on " + this.id)

标签: javascript jquery click


【解决方案1】:

因为您调用的是函数 alertOnClick 而不是将其作为引用传递

你应该这样做:

$("#objectId").click(alertOnClick)

function alertOnClick(ev) {
    alert("Clicked on " + ev.target.id);
}

当您执行$("#objectId").click(alertOnClick("objectId")) 时,您是在单击事件发生之前以objectId 作为参数调用alertOnClick 方法。您应该做的是传递方法的引用,以便在 click 事件发生时调用它。

【讨论】:

  • 谢谢。您是否有我可以阅读的博客文章链接或推荐资源,以进一步了解对方法的引用和调用函数之间的区别以及应该在点击事件上使用哪个?我现在知道该做什么,但只是作为一种记忆而不是学习/理解它
  • @textmachina 当然,stackoverflow 有很多与该主题相关的问题/答案。您可以查看这个,例如:stackoverflow.com/questions/6466031/… 或这个:stackoverflow.com/questions/13286233/…。希望对您有所帮助。
【解决方案2】:

为此,您需要从alertOnClick 返回一个函数,如图所示:

function alertOnClick(objectToClick) {
  return function() {
    alert("Clicked on " + objectToClick)
  }
}

这将允许您执行以下操作:

$("#objectId").click(alertOnClick("objectId"))

这是一个工作代码示例,可以查看它的实际效果:

function alertOnClick(objectToClick) {
  return function() {
    alert("Clicked on " + objectToClick)
  }
}

$("#objectId").click(alertOnClick("objectId"))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js">
</script>
<button id="objectId">Object Id</button>

【讨论】:

  • function() {...}不是用来现场定义一次性功能的吗?这样你定义一个返回函数的函数?为什么我不能首先使用该功能?谢谢
  • 嗨@textmachina,是的 - function() {..} 用于定义停止上的函数。然而,在 javascript 中,拥有一个返回新函数(即内部)的函数(即外部)也是有效的,如我的答案所示。就我的回答而言,在设置$("#objectId").click(alertOnClick("objectId")) 时,外部函数会被立即调用,并带有参数“objectId”。调用alertOnClick('objectId') 会导致将一个新函数返回给click 处理程序——这件事的巧妙之处在于返回的函数由外部函数参数化。希望这会有所帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多