Что функция () означает в jQuery? В чем разница между этим и $ (этим) - PullRequest
2 голосов
/ 23 июня 2011

Вопрос 1

Я только начал изучать jQuery, и одна вещь, которая меня удивляет, это function() с параметром в нем, т.е.1008 * [Пример 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 отличается от e в примере 1.

Я не совсем понимаю, почему 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 ]

3 голосов
/ 23 июня 2011

function (e) -> это передает объект события в качестве параметра.Без e у вас просто нет доступа к объекту события.

«this» - это объект в контексте того, что вы делаете.Если вы заключите «this» в $ (this), у вас будет доступ ко всем расширениям, которые дает вам jQuery.Чтобы быть более понятным, «this» обычно является объектом DOM, $ (this) является объектом jQuery.

2 голосов
/ 23 июня 2011

Вы можете объявить функции одним из двух способов в 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. Я уверен, что он, вероятно, сделает то же самое для вас.

1 голос
/ 23 июня 2011

функция (х) {...}

- это анонимная функция (т.е. вы не даете ей явное имя), передаваемая в качестве аргумента этим функциям (в ваших примерах, передаваемая в качестве аргумента для click () и post ()). Это обычно используется для обратных вызовов. Функция click () выполняет некоторые действия, а затем в дальнейшем ваша анонимная функция вызывается как ответ на что-то (в данном случае событие click).

Символ х означает, что эта анонимная функция принимает один параметр, и ее имя в области действия функции будет х. Вы можете называть его как угодно (в одном примере это e, в другом - данные, но ни в одном случае он не должен использовать эти имена). В общем, вы можете сделать так, чтобы он принимал столько параметров, сколько вы хотите, например, function (x, y, z) {return (x + y + z); } но в приведенных вами примерах jQuery ищет определенный прототип.

1 голос
/ 23 июня 2011

В вашем первом примере:

 $("#rating a").click(function(e){
     // stop normal link click
     e.preventDefault();
 }

e - это объект события . Это метод protectDefault предотвращает использование по умолчанию для используемого события. В этом случае клик не будет иметь никакого эффекта. Используется как return false; но некоторые браузеры могут иметь разные действия. Это работает для всех.

Что касается этого против $ (this)

Находясь внутри функции, если this ссылается на элемент DOM, который вызвал событие, $(this) по-прежнему является элементом DOM, который вызвал событие, только он оборачивается в элемент jQuery, заключая в себя $ () это.

проверьте этот вопрос на SO jQuery: В чем разница между '$ (this)' и 'this'?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...