当前位置: 首页 > 知识库问答 >
问题:

如何在与jQuery相同的函数中设置依赖于事件处理程序的变量?

莘康裕
2023-03-14

我正在为一些jQuery开发人员做一些可能很简单的事情而苦苦挣扎。

我想通过两个事件处理程序传递一个变量,并在事件之外获得最终值。

function myfunction(){

 var val = "";

 $(document).on('keyup',function(e) {
   if(e.which == 13) {
     val = "keyup";
     console.log(val);  
   }
 });

 $('#list li').click(function() {
   val = "click"
   console.log(val); 
 });

 console.log('final val =' + val);

}


$(document).ready(function(){
 myfunction();
});

所以基本上,我应该在控制台中得到两条带有相同“val”的消息!

有什么办法让它工作吗?

如果有任何信息缺失,请在评论区让我知道!

共有1个答案

田信然
2023-03-14

您似乎不了解回调是如何工作的。让我解释一下。您有两个事件,一个针对document上的keyup,另一个针对click上的li元素。它们接收一些函数作为参数。在您的代码运行时,您传递给事件处理程序的函数只被定义,而不被执行,这是完全合乎逻辑的,因为在这一点上,不会发生触发它们的事件。因此,回调是定义的行为,当发生某些事情时会触发这些行为。

因此,您误解的是,您混淆了事件处理程序的定义和它们的执行。但是,在它们的定义点,它们没有被执行,就在为一个变量调用它们的定义console.log之后,该变量由于缺少触发其初始化的事件而尚未初始化。

回调是事件发生时“回调”的函数。

例如,如果你给某人打电话,让他/她来拜访你,那么主动地在门外等他们是没有意义的。当他到达的时候,他会给你回电话,因为发生了一件事。就回调而言,这种行为在函数级别上非常相似

 $(document).on('keyup',function(e) { //when keyup on document, much later than the call of myFunction happened
   if(e.which == 13) {
     val = "keyup";
     console.log(val);  
   }
 });

 $('#list li').click(function() { //when clicking on li, much later than the call of myFunction happened
   val = "click"
   console.log(val); 
 });

 console.log('final val =' + val); //At the call of myFunction at page load

由于document上的keyupli元素上的click随时可能发生,因此讨论val的最终值没有多大意义。由于keyupclick很少同时发生,因此在给定时刻确定val的最终值似乎是在处理边缘情况。如果这是您想要的,那么您可以使用信号量行为。

 类似资料:
  • 我是Java编程的新手,所以这个问题对这里的许多人来说可能听起来很愚蠢。我试图让自己熟悉JavaFX事件处理机制。 我正在开发一个GUI,我希望按钮在单击它时以及按下Enter键时执行相同的功能。 我能做以下事情吗? 然后将它用于两个按键事件

  • 问题内容: 让我开始关注消息队列和Redis MQ (出色的框架)。 我了解您必须使用.RegisterHandler(…)确定哪个处理程序将处理消息队列中的消息/事件的类型。 因此,如果我有EventA,EventB等,我应该有一个服务来处理每个这些事件,例如: 因此,这些应该只是创建的队列/ redis列表? 另外,如果我希望发生一系列事件,例如EventA类型的消息也具有一个处理程序,该处理

  • 我正在使用GoogleFirebase(身份验证和云firestore)开发一个应用程序。根据文档,我应该将以下依赖项添加到我的应用程序级构建中。gradle文件以访问cloud firestore数据库 但是,这种方法在编译时会产生以下错误: "注释处理器现在必须显式声明。发现编译类路径上的以下依赖项包含注释处理器。请将它们添加到注释处理器配置。-auto-value-1.4.jar(com.g

  • 我试图在一个简单的JavaFX应用程序中向一个可编辑的组合框中添加一个关键事件处理程序。由于场景构建器不提供对组合框中的TextField的访问,我不得不在代码中添加事件处理程序。 下面是我添加处理程序的尝试。 设置事件处理程序的更合适的方法是什么? 编辑:添加完整的源代码

  • 我在页面上有输入字段和提交按钮。 这里是jQuery代码: 我想防止模糊,如果从输入字段点击提交div,但想允许它,如果从输入字段点击页面的其他部分。我无法使用“提交”按钮。 我已竖起了小提琴。净/405kzboh/1 但是现在我甚至不明白为什么点击事件没有在模糊事件之前触发,如果有人从输入点击提交!

  • 最近,我发现SBT的一个有趣的问题。我很难用几句话来描述它,所以下面是我所做的几个步骤。 我有一些scala任务要部署。我把它发布到我们本地的nexus repo中,所以有几个项目可以使用它。下面是内部nexus回购的屏幕截图 因此,我将其放入build.sbt文件。 “sbt.LiquiBase”%“**sbt-LiquiBase-Deploy”%“1.0-3”** 它失败于未解决的依赖,我对此