问题1
我刚开始学习jQuery,其中一件让我感到困惑的是function()
,其中包含一个参数,即:function(e)
。
[示例1]
$("#rating a").click(function(e){
// stop normal link click
e.preventDefault();
}
e
中的function(e)
是什么?
[示例2]
$.post("test.php", function(data) {
alert("Data Loaded: " + data);
});
你怎么知道data
是什么?我假设data
与示例1中的e
不同。
我很困惑为什么 function()
在不同的情况下有所不同......
问题2
由于我们讨论的是基本的jQuery,这是另一个jQuery问题。 this
和$(this)
之间有什么区别?
[示例3]
$(document).ready(function() {
// use this to reset several forms at once
$("#reset").click(function() {
$("form").each(function() {
this.reset();
});
});
[示例4]
$("a").hover(function(){
$(this).parents("p").addClass("highlight");
},function(){
$(this).parents("p").removeClass("highlight");
});
});
答案 0 :(得分:3)
功能(e) - >这是将事件对象作为参数传递。没有e,您就无法访问事件对象。
“this”是你正在做的事情的背景对象。如果你像$(this)那样包装“this”,那么你可以访问jQuery给你的所有扩展。更清楚的是,“this”通常是一个DOM对象,$(this)是一个jQuery对象。
答案 1 :(得分:2)
您可以在JavaScript中以两种方式之一声明函数。
这样:
function MyFunction() {
//Functiony stuff
}
就这样:
var MyFunction = function() {
};
使用第二种方法,您可以将该函数作为参数传递给其他函数。那些接收它的函数可以提供它的参数。如果未在函数中定义这些参数,则无法访问它们。这里有一点:
var MyFunction1 = function(message) {
alert(message);
};
var MyFunction2 = function(alertFunction) {
if(alertFunction != null)
alertFunction("Here's another method!");
};
//You can then call MyFunction and pass it arguments, even if that argument is a function.
MyFunction2(MyFunction1);
如果你没有在MyFunction1中定义消息变量,你将永远不会得到通过MyFunction2传递给它的消息。希望我没有做到比它需要的更复杂......基本上,你可以传递函数,如果你不提供方法将传递给它的变量,你就不能使用它们。这就是你说的话时你正在做的事情:
$("MySelector").click(function(e) {
//Stuff here
});
您正在向点击功能发送匿名功能。如果您没有提供它将传递给您的变量,则无法使用它们。
一旦我意识到你很久以前就能做到这一点,它改变了我编写JavaScript的方式。我相信你可能也会这样做。
答案 2 :(得分:1)
在您的第一个示例中:
$("#rating a").click(function(e){
// stop normal link click
e.preventDefault();
}
e
是event object。它的preventDefault方法可以防止使用事件的默认值。在这种情况下,单击将没有任何效果。它像返回false一样使用;但有些浏览器可能有不同的操作。这适用于所有人。
至于此vs $(this)
在函数内部,如果this
引用触发事件的DOM元素,$(this)
仍然是触发事件的DOM元素,只有它包装在jQuery元素中$()围绕它。
在SO jQuery: What's the difference between '$(this)' and 'this'?
上查看此问题答案 3 :(得分:1)
function(x){...}
是一个匿名函数(即你没有给它一个显式名称)作为参数传递给那些函数(在你的例子中,作为参数传递给click()和post())。这通常用于回调。 click()函数做了一些事情,然后在线上,你的匿名函数被调用作为对某事的响应(在这种情况下是一个点击事件)。
x表示此匿名函数接受一个参数,其在函数范围内的名称将为x。你可以随心所欲地命名它(在一个例子中,它是另一个它的数据,但在这两种情况下都不必使用这些名称)。一般来说,你可以让你需要尽可能多的参数,比如函数(x,y,z){return(x + y + z);但是,在你给出的例子中,jQuery正在寻找一个原型。