2015-03-10 3 views
0

Итак, у меня есть divs на моей веб-странице, которые при щелчке присваиваются переменной. Мне нужно получить доступ к этим переменным позже, когда будет нажата другая кнопка, чтобы включить их в отправляемое электронное письмо. Я думаю, что это моя локальная переменная. Но если я заменил его frameColour, тогда он не будет работать, поскольку он не является глобальным. Как я могу обойти это?Как обойти область видимости javascript

$('#purple').click (function() { 
      $(".border").css("fill", "#763d81"); 
      var frameColour = "purple"; 
    }); 

$("#button").click (function() { 
    var mailbody = "hello world."; 
    window.open('mailto:[email protected]?subject=My Frame&body=' + mailbody); 
}); 
+0

Вы не можете «обойти прицел». – elclanrs

+0

Вы можете объявить переменную перед вашей функцией –

+0

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

ответ

1

Если вам нужно frameColour быть доступны в других функциях, вы должны переместить его объем до; чтобы предотвратить добавление его в глобальную области видимости, вы можете обернуть соответствующие функции в другой функции, т.е .:

jQuery(function($) { 
    var frameColour; 

    $('#purple').click (function() { 
     $(".border").css("fill", "#763d81"); 
     frameColour = "purple"; 
    }); 

    $("#button").click (function() { 
     var mailbody = "hello world."; 
     // you can use frameColour here 
     window.open('mailto:[email protected]?subject=My Frame&body=' + mail body); 
    }); 
}); 
+0

У меня есть они в документе. Уже. Считает ли это, переместили ли переменные? –

+0

@dunn_rite 'jQuery (function ($) {...});' конструкция, которую я использую, есть в основном функция готовности документа, поэтому могут применяться одни и те же правила :) –

+0

Ах, спасибо, попробуем :) –

0

Просто сделать заявление перед вашим «нажмите сферу».

var frameColour; 

$('#purple').click (function() { 
      $(".border").css("fill", "#763d81"); 
      frameColour = "purple"; 
    }); 

$("#button").click (function() { 
    var mailbody = "hello world."; 
    window.open('mailto:[email protected]?subject=My Frame&body=' + mailbody); 
}); 
0

попробуйте сделать его вне функции.

var frameColour  
$('#purple').click (function() { 
     $(".border").css("fill", "#763d81"); 
     frameColour = "purple"; 
}); 

$("#button").click (function() { 
    var mailbody = "hello world."; 
    window.open('mailto:[email protected]?subject=MyFrame&body=' + mailbody); 
}); 
0

Определите переменную i более высокого масштаба, а затем измените значение внутри вашей функции.

var frameColour; 
$('#purple').click (function() { 
      $(".border").css("fill", "#763d81"); 
      frameColour = "purple"; 
}); 

$("#button").click (function() { 
    var mailbody = "hello world."; 
    window.open('mailto:[email protected]?subject=My Frame&body=' + mailbody); 
}); 
0

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

var global_frameColour = "purple"; 

$('#purple').click (function() { 
    $(".border").css("fill", "#763d81"); 
    global_frameColour = "purple"; 
}); 

$("#button").click (function() { 
    var mailbody = "hello world."; 

    mailbody += global_frameColour; 
    window.open('mailto:[email protected]?subject=My Frame&body=' + mailbody); 
}); 

Если вы не хотите, чтобы ваша переменная должна быть глобальной, вы можете создать автоматическое выполнение обертку. Любые объявленные здесь переменные (с использованием ключевого слова var) будут ограничены только анонимной функцией. См. Ниже

(function(){ // declare an anonymous function 

    var scoped_frameColour = "purple"; 

    $('#purple').click (function() { 
     $(".border").css("fill", "#763d81"); 
     scoped_frameColour = "purple"; 
    }); 

    $("#button").click (function() { 
     var mailbody = "hello world."; 

     mailbody += scoped_frameColour; 
     window.open('mailto:[email protected]?subject=My Frame&body=' + mailbody); 
    }); 

})(); // this line is important as it executes the anon function 

console.log(scoped_frameColour); // undefined; out of scope 
Смежные вопросы