Глобальные переменные в JS / Jquery между функциями

0

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

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

var itemtitle= $ ("input # add_item_item_title"). val();

чтобы определить другое время.

Я был уверен, что это возможно, но, возможно, я что-то упустил.

JS/JQ

$(document).ready(function(){
  init();
});


function init() {
    $(function() {
      $('.error').hide();
      $(".add_item_btn").click(function() {
            // validate and process form here

            $('.error').hide();
            var itemTitle = $("input#add_item_item_title").val();
              if (itemTitle == "") {
              $("label#add_item_item_title_error").show();
              $("input#add_item_item_title").focus();
              return false;
            }

            //add_item();
            nu();
            return false;  
      });
    });
}



function nu(){
   // when using this the var is defined but would rather not have to reuse this//
   var itemTitle = $("input#add_item_item_title").val();
   /////////////////////////////////////////////////////////////////////

   var url = "script.php";
    $.ajax({
                type: 'POST',
                url: url, 
                dataType: 'html',
                data: {
                    itemTitle: itemTitle,
                    groupID: groupID, 
                    unitPrice: unitPrice        
                },
                beforeSend: function() {
                        document.getElementById("message").innerHTML="<span class='blink_me'>Sending..</span>"  ;
                },
                success: function(html) {
                        document.getElementById("message").innerHTML=itemTitle;

                }
    });

}
  • 0
    Вы не используете глобалы. Глобальные переменные определены вне вершины: $(document).ready(function(){});
  • 2
    Вам нужно узнать об объемах и замыканиях
Показать ещё 1 комментарий
Теги:
variables
global

1 ответ

0
Лучший ответ

Удалите var в вашей декларации переменной.

Уточнение: вы определяете эту переменную с var, поэтому она доступна только в пределах этой функции и любых функций, определенных непосредственно внутри нее. Если вы просто используете myVar = 15; (без var) переменная будет определена в глобальной области. В браузере это эквивалентно использованию window.myVar = 15.

Дальнейшее разъяснение: использование глобальных переменных обычно означает, что вы делаете то, чего не должно быть. Я не пурист, но у меня такое чувство, что многие будут плакать. Вы рискуете переназначить эту глобальную переменную на другое значение до того, как была вызвана функция обратного вызова - это может быть болью в прикладе, чтобы отлаживать такие проблемы.

В вашем примере, почему бы просто не передать переменную функции, например nu(itemTitle); :

function nu(itemTitle){
    /* blah blah blah */
    /*
     * itemTitle is now available here and directly
     * in any functions that are defined in this
     * part of the code
     */
}
  • 0
    Сработало, так что я понимаю, что не использовал глобальные переменные, но есть ли какие-то непосредственные проблемы с тем, чтобы не объявлять «var» перед var? Спасибо
  • 0
    Я не вижу никаких проблем на основе кода, который вы написали здесь. Но если какая-то другая функция изменила значение itemTitle до ответа от сервера, у вас может быть потенциальная ошибка. Такие ошибки могут ДЕЙСТВИТЕЛЬНО расстраивать, потому что они могут не отображаться в вашем тестовом экземпляре.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню