[英]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
的最终值没有多大意义。 由于keyup
和click
很少同时发生,因此在给定时刻确定val
的最终值似乎是在处理边缘情况。 如果这是您想要的,那么您可以使用信号量行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.