#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, думаю, что сейчас это действительно не имеет значения.