2014-02-21 2 views
0

У меня немного проблемы с пропусканием глобального переменного значения между функциями ... мой cssStr всегда содержит indo со значением 1 независимо от того, что я установить значение с помощью setindo() функция. Предупреждение об отладке внутри этой функции всегда корректно.не Передавая глобальную переменной между функциями

var indo = "1"; 

function setindo(passedvalue) { 
    indo = passedvalue; 
    alert("indo = " + indo); 
} 


$(window).load(function(){ 
$(document).ready(function(){ 


var cssStr = ".upload-preview" + indo + " img"; 
var preview = $(cssStr); 

$(".file").change(function (event) {   //file is the class id 
    var input = $(event.currentTarget); 
    var file = input[0].files[0]; 
    var reader = new FileReader(); 
    //var title1 = $('#file').attr('id'); 
    alert("indo = " + indo); 
    alert(cssStr); 
    reader.onload = function(e){ 
     image_base64 = e.target.result; 
     preview.attr("src", image_base64); 
    }; 
    reader.readAsDataURL(file); 
}); 

</script> 
+1

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

+0

Я не должен был формулировать это так, как я .. Поздно уже немного устал, ха-ха. Когда вызывается глобальная переменная 'indo' при установке переменной' cssStr', это значение всегда является значением по умолчанию. Однако, когда я использую оповещение об отладке после установки значения, оно корректно. – user3329793

+2

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

ответ

0

Что вы видите, так это то, что cssStr определяется один раз, когда документ загружается первым. Значение переменной не изменяется при значении indo - они не связаны вообще после создания строки. Если вы хотите использовать значение indo при вызове этой функции, тогда создайте cssStr внутри этой функции, а не при загрузке документа.

+0

Спасибо! Я сделал 'cssStr' и' preview 'глобальными, и он исправил это. – user3329793

0

В setindo, используйте значение cssStr вместо, а затем он будет действительно глобальным. В настоящее время passedvalue находится в местной области до setindo

+0

' var cssStr = null; функция setindo (пройденное значение) { \t cssStr = ".upload-preview" + пройденное значение + "img"; \t alert (cssStr); \t} ' – user3329793

+0

? * cssStr * является локальным для выражения функции, переданного * ready *. Функция * setindo * не может получить к ней доступ. – RobG

+0

Теперь я сделал это, но он просто не работает правильно – user3329793

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