繁体   English   中英

如何在与 jQuery 相同的 function 中根据事件处理程序设置变量?

[英]How to set a variable depending on the event handler in the same function with jQuery?

对于一些经过试验的 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”的消息!

关于如何使它工作的任何想法?

如果缺少任何信息,请在评论部分告诉我!

回调

你似乎不明白回调是如何工作的。 让我解释。 您有两个事件,一个用于keyup document ,另一个用于click li元素。 这些接收一些function作为参数。 在您的代码运行时,您传递给事件处理程序的函数仅被定义,但未执行,这是完全合乎逻辑的,因为此时不会发生任何会触发它们的事件。 因此,回调是定义的行为,当事情发生时触发。

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

回调是一个 function,您的事件在发生时调用“返回”。

例如,如果您打电话给某人请他/她来拜访您,那么在您的门外主动等待他们是没有意义的。 当他到达时同意更有意义,他会在他到达时给你回电话,因为有事件发生。 就回调而言,该行为在功能级别上非常相似

之后会发生什么:

 $(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上的keyup和对li元素的click可能随时发生,因此讨论val的最终值没有多大意义。 由于keyupclick很少同时发生,因此在给定时刻确定val的最终值似乎是在处理边缘情况。 如果这是您想要的,那么您可以使用信号量行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM