как передать переменную в функцию?

#javascript #jquery

#javascript #jquery

Вопрос:

я хочу передать переменную (которая устанавливается при нажатии на ссылку) функции и показать ее в виде всплывающего окна.

код, как показано ниже:

 $('a#link1').click(function(e){
e.preventDefault();
    var value = 'true';
});


function exe(){
    alert(value);
}
  

когда функция выполняется, все, что я получаю, это значение не определено.

Итак, кто-нибудь знает способ обойти это?

Комментарии:

1. значение переменной; $(‘#link1’) …{ значение = true; } — если вы используете селектор идентификаторов, вам не нужно указывать имя элемента

Ответ №1:

Переменные имеют область видимости, вы определяете value переменную в области действия onclick closure, и она не будет доступна за ее пределами.

Сработало бы следующее:

 var value = false; //Define in the global scope

$('a#link1').click(function(e){
e.preventDefault();
    value = false; //Use in a local-scope is legal. 
});

function doSomething()
{
 alert(value);
}
  

Однако наличие большого количества глобальных переменных затруднит обслуживание вашего проекта, и есть другие, более понятные решения. В общем, я бы порекомендовал вам прочитать подходящую книгу по программированию, хотя 🙂

Комментарии:

1. Да. Другое опубликованное решение на самом деле не оптимально, поскольку вы можете запустить функцию без щелчка и вызвать ее сбой. Здесь она установлена по умолчанию, поэтому она не завершится сбоем, даже если она будет запущена вне щелчка мыши 🙂

2. Нет проблем, хорошо, что я смог вам помочь. Однако, если вы серьезно относитесь к веб-разработке, я настоятельно рекомендую вам продолжить обучение, купив соответствующую книгу. Область видимости переменной важна для программирования, и может быть трудной концепцией для понимания (особенно в этом шатком языке под названием javascript).

Ответ №2:

Просто сделайте переменную глобальной или, что еще лучше, «прикрепите» ее к элементу с помощью .data() :

 $('a#link1').click(function(e) {
e.preventDefault();
    $(this).data("value", "true");
});
  

Тогда вы всегда можете проверить это:

 function exe() {
    alert($('a#link1').data("value"));
}
  

Обратите внимание, что это было добавлено в jQuery 1.2.3, думаю, что сейчас это действительно не имеет значения.