2011-12-05 2 views
0

Может кто-нибудь объяснить мне, почему это не работает:JQuery глобальной переменной

$(function() { 
    var damg = $(".hidden").val(); 

    $("button").click(function() { 
     alert(damg); 
    }); 
}); 

jsFiddle: http://jsfiddle.net/raFnT/

Хорошо ли использовать глобальные переменные? Я также читал, что это более медленный вариант, чем написание его каждый раз?

Чтобы подробно объяснить:

У меня есть это:

$("button").click(function() { 
      alert(damg); 
     }); 

и damg является значение входа: var damg = $(".hidden").val();

Когда вы печатаете что-то во входном потоке, а затем нажмите кнопку, предупредить значение этого входа.

я мог бы использовать

$("button").click(function() { 
var damg = $(".hidden").val(); 
       alert(damg); 
      }); 

, но в какой-то момент, что у меня будет 100 функций я в конечном итоге, как это:

$("button1").click(function() { 
    var damg = $(".hidden").val(); 
        alert(damg); 
       }); 

$("button2").click(function() { 
    var damg = $(".hidden").val(); 
        alert(damg); 
       }); 

$("button3").click(function() { 
    var damg = $(".hidden").val(); 
        alert(damg); 
       }); 

$("button4").click(function() { 
    var damg = $(".hidden").val(); 
        alert(damg); 
       }); 

$("button5").click(function() { 
    var damg = $(".hidden").val(); 
        alert(damg); 
       }); 

Я хочу установить глобальную переменную так, чтобы на каждой функции Мне не нужно снова вызывать функцию.

Что-то вроде этого:

var damg = $(".hidden").val(); 

$("button1").click(function() { 
     alert(damg); 
    }); 

$("button2").click(function() { 
     alert(damg); 
    }); 

$("button3").click(function() { 
     alert(damg); 
    }); 

$("button").click(function() { 
     alert(damg); 
    }); 

$("button4").click(function() { 
     alert(damg); 
    }); 

$("button5").click(function() { 
     alert(damg); 
    }); 
+5

Это отлично работает. Проблема в том, что в то время, когда вы вызываете 'var damg = $ (". Hidden "). Val();', поле еще не имеет значения. И 'damg' не * глобальный *. Он локален для непосредственной функции. –

+0

Введите что-то на вход, а затем нажмите кнопку. – jQuerybeast

+0

И? Он будет предупреждать о пустом значении. Поскольку значение поля ввода присваивается 'damg' при загрузке страницы, а не при нажатии кнопки. Если вы хотите, чтобы «damg» обновлялся всякий раз, когда изменяется значение поля, вам нужно настроить обработчик события «change» для текстового поля. Строка не обновляется автоматически. –

ответ

7

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

Ваш код не работает, потому что .hidden не имеет значения.

http://jsfiddle.net/raFnT/2/

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

Кроме того, вы не перезагружаете значение в обработчике кликов.

$(function() {    
    $("button").click(function() { 
     var damg = $(".hidden").val(); 
     alert(damg); 
    });    
}); 

http://jsfiddle.net/raFnT/6/

В интересах иметь хороший ответ, что ОП хочет это blur функция.

$(function() {  
    var damg; 

    $(".hidden").blur(function() { 
     damg = $(".hidden").val(); 
    }); 

    $("button").click(function() { 
     alert(damg); 
    });    
}); 

http://jsfiddle.net/raFnT/7/

+0

Вы ошибаетесь. Введите что-то на вкладке и нажмите на меня. – jQuerybeast

+0

См. Править выше. – BNL

+0

Если бы у меня было 100 функций, мне пришлось бы установить var damg = $ (". Hidden"). Val(); 100 раз, и это так плохое решение. Поэтому я пытаюсь установить переменную как глобальную, а затем вы добавляете значение = «что-то» внутри ввода, и вы говорите, что у меня ничего не было на входе.Вы даже пытались ввести что-то на вкладке, а затем нажать кнопку? – jQuerybeast

1

Ваш пример работает. Проблема в том, что вы устанавливаете damg на готовый документ. В готовом документе ваше текстовое поле не имеет значения. Если вы присвоите значение по умолчанию, оно будет предупреждать это значение при нажатии кнопки.Вы можете увидеть это в действии в этой скрипкой: http://jsfiddle.net/raFnT/1/

Если вы хотите изменить значение damg на каждой кнопке нажмите изменить свой код следующим образом:

var damg; 

$("button").click(function() { 
    damg = $(".hidden").val(); 
    alert(damg); 
}); 
+0

Неправильно снова. Измените значение входа и нажмите кнопку. – jQuerybeast

+0

Что именно не так? В моем примере отображается значение по умолчанию при нажатии кнопки. Если вы хотите, чтобы значение менялось каждый раз, посмотрите на предлагаемое изменение кода, которое я предоставил. Вы можете увидеть это в действии здесь: http://jsfiddle.net/raFnT/8/ –

0

Переменная damg создается сразу при функция сначала выполняется - вам нужно установить этот var в самой функции щелчка, чтобы она захватывала значение из поля в это время.

Не знаю, почему это было вниз проголосовали - это то, что вы просили:

$(function() { 

    var damg = $(".hidden").val(); 

    $("button").click(function() { 
     damg = $(".hidden").val(); 
     alert(damg); 
    }); 

}); 

Или еще проще:

$(function() { 

    $("button").click(function() { 
     alert($(".hidden").val();); 
    }); 

}); 
+0

Если мне нужно использовать эту переменную в 100 различных функциях, мне придется установить 100x var damg = $ (". Hidden"). Val(); ? – jQuerybeast

+0

вы могли бы добавить событие blur в .hidden, так что всякий раз, когда он будет изменен, ваша переменная обновится. – BNL

+0

Можете ли вы проверить мое редактирование, пожалуйста? – jQuerybeast

-1

Это не глобальная переменная. Это переменная, привязанная к анонимной функции, которую вы передаете готовому обработчику jQuery.

Причина, по которой это не работает (и не работает, я предполагаю, что вы имеете в виду, что она оповещает пустую строку), потому что damg назначается при загрузке DOM. В это время ваше текстовое поле не имеет значения. Так что это на самом деле работает. Если вы хотите, чтобы значение текстового поля всякий раз, когда вы нажимаете кнопку, вам нужно получить его значение внутри обработчика кликов.

Вы можете кэшировать поиск DOM, делая что-то вроде этого, хотя:

$(function() { 
    var damg = $(".hidden"); 

    $("#one").click(function() { 
     alert("button one: " + damg.val()); 
    }); 

    $("#two").click(function() { 
     alert("button two: " + damg.val()); 
    }); 
}); 

<input type="text" class="hidden" placeholder="Type text here"> 
<button id="one">Click me(1)!</button> 
<button id="two">Click me(2)!</button> 
0

Просто добавить свои два цента, вот то же самое решение, но с помощью функции изменения для отслеживания изменений.

JS

var damg; 

$('#contact-name').on('change', function(){ 
    damg = $(".hidden").val(); 
}); 
Смежные вопросы