2016-01-12 3 views
0

В настоящее время я разрабатываю карту с библиотекой Openlayers 3 и должен понимать функции обратного вызова.Как узнать, какие параметры доступны в функциях обратного вызова jQuery, как их понять и добавить параметры?

Затем я начал читать и узнал, что я постоянно пользуюсь функциями обратного вызова с помощью jQuery. Я также читал, что вы можете использовать параметры, которые доступны в этих функциях:

$('body').click(function(e){ 
    e.preventdefault(); 
)} 

«Е» можно использовать в функции.

Мои вопросы:

  1. Как узнать, какие параметры доступны?
  2. Можете ли вы добавить параметры к этой функции?
  3. Где эти параметры определены?

Я пытаюсь понять это, потому что мне придется использовать глобальные параметры в противном случае, а использование глобальных параметров считается «плохой практикой», верно?

EDIT:

Так что, если я хочу, чтобы добавить дополнительный параметр в функции выше, это будет работать:

document.ready(function(){ 
    var data = 6; 
    $('body').click(function(e, data){ 
     e.preventdefault(); 
     console.log(data); 
    }) 
}) 
+3

В документации рассказывается, какие параметры предоставляются для обратного вызова. –

+0

Вы прочитали документацию для '$ .click()'? https://api.jquery.com/click/ И это сокращение от использования '$ .on()' https://api.jquery.com/on/ В частности, см. «Передача данных обработчику» https: // api .jquery.com/on/# pass-data – matthewpavkov

+0

Что вы пытаетесь выполнить? Почему вы пытаетесь добавить «дополнительный параметр» вообще? – matthewpavkov

ответ

1

параметры в функции обратного вызова описаны в конкретных API вы находитесь с помощью.

Например, ссылка на click -метода в JQuery можно найти здесь: https://api.jquery.com/click/

Если вы хотите добавить параметры в функции вы можете использовать переменные из вне функции, они будут доступны в том, что функция:

document.ready(function(){ 
    var data = 6; 
    $('body').click(function(e){ // Note: don't add 'data' in the parameter here, it will overwrite your local variable with whatever jquery passes to the function. 
     e.preventdefault(); 
     console.log(data); // data = 6, it's available from the outer function 
    }) 
}) 

Поскольку обратный вызов не будет выполняться при подключении обработчика (иначе при вызове $("body").click() иногда вам нужно будет убедиться, что переменная, которая доступна при выполнении имеет то же значение, когда ручка была

Допустим, вы имеете следующее заявление:

var data = 6; 
$('body').click(function(e){ 
    e.preventDefault(); 
    console.log(data); 
}); 
data = 10; 

В приведенном выше случае, console.log(data) заявление будет выводить 10. Почему? Потому что к тому времени, пользователь щелкает, последнее утверждение будет уже выполнена, и что будут изменены data для хранения значения 10.

Чтобы устранить эту проблему, вам нужно захватить переменную внутри закрытия:

var data = 6; 
    $('body').click((function(myVar){ 
     return function(e){ 
      e.preventDefault(); 
      console.log(myVar); 
     } 
    })(data)); 
    data = 10; 

Здесь значение 6 будет записано на консоль. Зачем? Вместо того, чтобы передать простую функцию в клик-обработчика, вы объявить функцию и немедленно исполнить его так:

(function(){ 
})() 

С этой IIFE (сразу вызывается функция выражения), вы возвращаете другую функцию, которая будет использоваться как обработчик события click.Переменная, которую вы передаете в IIFE, будет сохранена и будет сохраняться на том же значении, что и при прикреплении обработчика щелчка

+0

Благодарим за отзыв. Таким образом, добавляя анонимную функцию, вы предотвращаете потерю данных, но все же должны определить параметр как «глобальный»? – Abayob

+0

Нет, вы, переменная, не должны быть глобальными. Он просто должен быть в области, когда вы прикрепляете обработчик кликов. – Kenneth

+0

Удивительный! Я все еще пытаюсь понять, как правильно создавать области и предотвращать повторное использование событий, поэтому ваша информация мне очень помогает: D – Abayob

Смежные вопросы