2013-09-25 8 views
7

Как передать функцию a_href = $(this).attr('href'); значение глобальной a_href, сделать a_href="home"JQuery сделать глобальную переменную

+0

Да, это выглядит очень хорошо. – Ryan

+0

Он должен работать так, как вы ожидаете. – PSL

+0

проблема только в том случае, если 'var a_href' находится внутри обработчика dom. ... объявление переменной mush должно находиться в глобальном пространстве или использовать' window.a_href = $ (this) .attr ('href') ' –

ответ

22

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

jQuery(function(){ 
    //here it is a closure variable 
    var a_href; 
    $('sth a').on('click', function(e){ 
     a_href = $(this).attr('href'); 

      console.log(a_href); 
     //output is "home" 

     e.preventDefault(); 
    } 
}) 

Чтобы сделать переменную глобальной, одно решение, это объявить переменную в глобальной области

var a_href; 
jQuery(function(){ 
    $('sth a').on('click', function(e){ 
     a_href = $(this).attr('href'); 

      console.log(a_href); 
     //output is "home" 

     e.preventDefault(); 
    } 
}) 

другой, чтобы установить переменную как свойство объекта окна

window.a_href = $(this).attr('href') 

Почему консоль печати undefined

Вы получаете вывод как undefined, потому что, хотя переменная объявлена, у вас нет initia lized его значением, значение переменной устанавливается только после нажатия на элемент a до того момента, когда переменная будет иметь значение undefined. Если вы не объявляя переменную будет бросать ReferenceError

+0

Спасибо лот, отметит его :-) – olo

+0

Я знаю, что это старо, но человек это помогло мне. благодаря –

0

установить переменную в окне:

window.a_href = a_href; 
1

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

(function(global) { 

    ... 

    global.varName = someValue; 

    ... 

}(this)); 

Недостатком этого метода является то, что globa.varName не будет существовать до тех пор, пока эта строка кода не будет выполнена, но с ней можно легко обойтись.

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

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