简体   繁体   English

参数不与window.onblur和onfocus一起使用的函数

[英]Function with arguments not working with window.onblur and onfocus

The following code isn't working 以下代码不起作用

window.onfocus = welcome("John Doe");
window.onblur = bye("John Doe");

function welcome(name) {
    $("p").append("Welcome back " +name+ " <br>");
}

function bye(name) {
    $("p").append("Good bye " +name+ " see you soon <br>");
}

However I noticed that this code works for custom functions that dont take any argument. 但是我注意到该代码适用于不带任何参数的自定义函数。 See code below. 请参见下面的代码。 The following code is working: 以下代码正在运行:

window.onfocus = welcome; //No Argument here so this code works
window.onblur = bye; //Same here... No argument for the function

function welcome(name) {
    $("p").append("Welcome back John Doe <br>");
}

function bye(name) {
    $("p").append("Good bye John Doe see you soon <br>");
}

I am new to jquery and javascript and this stuff is confusing me. 我是jquery和javascript的新手,这些东西使我感到困惑。 Can someone please explain why exactly it isn't working. 有人可以解释一下为什么它确实不起作用。 and how can I make a custom function with arguments work with window.onfocus and onblur method. 以及如何使用window.onfocus和onblur方法使带有参数的自定义函数起作用。 (reason for working or not working is more important for me as I want to understand the mechanics rather than cramming up the syntax) (工作或不工作的原因对我来说更重要,因为我想了解其机制而不是加紧语法)

()(parenthesis) after function-name will invoke/call the function by the time you are assigning the handler to the events. 在为事件分配处理程序时, function-name后的()(parenthesis)将调用/调用函数。

Use anonymous-function instead of invoking-function and invoke/call the function inside it. 使用anonymous-function而不是invoking-function然后调用/调用其中的function

In your second(working) example, you are assigning function definition(body of the function) as a event-handler hence function is invoked after particular event. 在第二个(有效的)示例中,您将函数定义(函数的主体)分配为事件处理程序,因此在特定事件后调用函数。

 window.onfocus = function() { welcome("John Doe"); }; window.onblur = function() { bye("John Doe"); } function welcome(name) { $("p").append("Welcome back " + name + " <br>"); } function bye(name) { $("p").append("Good bye " + name + " see you soon <br>"); } 

Try $(window).focus() and $(window).blur() event: 尝试$(window).focus()$(window).blur()事件:

 $(function() { $(window).focus(function() { welcome("John Doe"); }); $(window).blur(function() { bye("John Doe"); }); }); function welcome(name) { $("p").append("Welcome back John Doe <br>"); } function bye(name) { $("p").append("Good bye John Doe see you soon <br>"); } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <p></p> 

Your code is working fine. 您的代码运行正常。 Add JavaScript file on page. 在页面上添加JavaScript文件。

 window.onfocus = welcome("John Doe"); window.onblur = bye("John Doe"); function welcome(name) { $("p").append("Welcome back " + name + " <br>"); } function bye(name) { $("p").append("Good bye " + name + " see you soon <br>"); } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <p></p> 

View on JSFiddle 在JSFiddle上查看

Both code is working fine for me. 两种代码对我来说都很好。 Try to put jQuery code in body section. 尝试将jQuery代码放在正文部分。

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

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