我是jQuery的新手,并试图找出以下两种语法之间的区别。
1. $( "#target" ).keyup(**function( event )** {
alert("Event argument");
}
2. $( "#target" ).keyup(**function( )** {
alert(" No Event argument");
}
Html:
input id="target" type="text"
在.keyup()定义中添加“event”参数是否有任何区别?
答案 0 :(得分:1)
除非你需要事件,否则它没有任何区别。对于keyup
事件,event
对象将包含非常有用的keyCode
。
试试这个:
$("#target").keyup(function(event) {
alert(event.keyCode);
}
使用console.log
而不是alert
更容易。您可能希望更改为,以便您不必一直处理弹出窗口。在开发工具中查看日志(可能是f12键)。
这可能有助于您更好地了解正在发生的事情:
function foo(yourFunction) {
var eventObject = {keyCode: 10};
yourFunction(eventObject);
}
foo(function(event) {
console.log(event);
});
在此示例中,调用函数foo
并将函数传递给它。 foo
然后调用传入的函数并将值传递给该函数。为了使该函数使用它,函数必须给它一个名字。看看这个:
foo(function() { //now the function doesn't accept any arguments/parameters
console.log(event); // what is "event" ???
});
可以使用变量arguments
访问传递给函数的参数。与我之前的例子保持一致:
function foo() { //argument name removed
var eventObject = {keyCode: 10};
yourFunction(eventObject); //this is now undefined
console.log(arguments);
//this will be an array
//the first value of the array will be the function that was passed in
}
foo(function() { //argument named remove
console.log(event); //this is also undefined
console.log(arguments);
//the first value of "arguments" will be the eventObject that was passed in
});
无论你是否编写接受参数的函数,参数仍然可以传递给它并且可以与arguments
变量一起使用,但是如果你需要它们,你应该给它们一个局部变量名。
最后一件事。你为什么命名论证并不重要。你只是给它你想要的任何本地名称。
$("#target").keyup(function(e) {
alert(e);
}
$("#target").keyup(function(evt) {
alert(evt);
}
$("#target").keyup(function(event) {
alert(event);
}
$("#target").keyup(function(cookieMonster) {
alert(cookieMonster);
}
所有这些都完全相同。变量引用相同的事件对象,因为它是传入的内容。
答案 1 :(得分:1)
无论如何都将参数传递给函数。通过将它们放在函数签名中,您实际上是为每个参数创建局部变量。例如,这些基本上是相同的。
$("#target").keyup(function() {
var event = arguments[0];
}
$("#target").keyup(function(event) {
}
如果您不打算使用event
变量,则不声明它不会造成伤害。