function()在jQuery中意味着什么?这和$(这个)有什么区别

时间:2011-06-22 23:30:29

标签: javascript jquery jquery-selectors

问题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");
   });

});

4 个答案:

答案 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();
 }

eevent 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正在寻找一个原型。