2016-12-02 14 views
0

У меня есть один файл test.html с двумя <script> тегами. Мне нужно разделить переменную от одного к другому .. кодJavascript - Share Переменные по разным <script> теги

Пример:

<script type="text/javascript"> 
 
    var test = false; 
 

 
    function testing() { 
 
    test = true; 
 
    alert('I am inside..'); 
 
    } 
 

 
    testing(); 
 
</script> 
 
... 
 
<script type="text/javascript"> 
 
    if (test == true) { 
 
    alert('working'); 
 
    } else { 
 
    alert('failed'); 
 
    } 
 
</script>

Выход всегда:

Я внутри ..

не удалось

Я также попытался использовать window класс, но это не имеет значения .. (window.test)

Что я должен сделать, чтобы получить «рабочую» предупреждение?

Спасибо, если кто-нибудь может мне помочь. Я видел некоторые подобные вопросы, но ответы не были для меня решением.

EDIT:

Исходный код (упрощенно):

<head> 
    ... 
    <script type="text/javascript" src="detectblocker.js"></script> 
    <!-- GitHub: https://github.com/sitexw/BlockAdBlock/ --> 
    ... 
</head> 
<body> 
    <script type="text/javascript"> 
     var blocker = false; 

     function adBlockDetected() { 
      blocker = true; 
      alert('inside'); 
     } 

     if(typeof blockAdBlock === 'undefined') { 
      adBlockDetected(); 
     } else { 
      blockAdBlock.onDetected(adBlockDetected); 
     } 

     blockAdBlock.setOption({ 
      checkOnLoad: true, 
      resetOnEnd: true 
     }); 
    </script> 
    <div class="header"> 
     ... 
    </div> 
    <div class="content_body"> 
     <div class="requirs"> 
      <ul> 
       ... 
       <script type="text/javascript"> 
        if (blocker == true) { 
         document.write("<li>enabled!</li>") 
        } else { 
         document.write("<li>disabled!</li>") 
        } 
       </script> 
       ... 
      </ul> 
     </div> 
    </div> 
    ... 
</body> 

Выходом является alert() "внутри" и <li> "отключено" .. (Blocker включено ..). Единственное различие я вижу в конце первого <script> тега:

blockAdBlock.setOption({ 
    checkOnLoad: true, 
    resetOnEnd: true 
}); 

Так почему же фрагмент работает и мой код не? Смешение ...

+0

Я преобразовал ваш фрагмент в живую демонстрацию и ... это работает. Какая бы проблема ни была, вы не выставили ее в своем вопросе. – Quentin

+0

Вы можете использовать localStorage. Хотя я не чувствую, что это элегантное решение вашей проблемы. – user2085143

+0

@ user2085143 - localStorage используется для обмена данными между разными страницами (или загрузками одной и той же страницы). Это не для обмена данными между разными сценариями на одной странице. – Quentin

ответ

0

Если вы не используете var перед переменной становится глобальной переменной, как

test = true; 

Переменная test будет верно в течение страницы, а также в ваших следующих сценариев и функций.

Попробуйте это:

<script type="text/javascript"> 
     var test = false; 

     function testing() { 
     var test = true; 
     alert('I am inside..'); 
     } 

     testing(); 
    </script> 
    ... 
    <script type="text/javascript"> 
     if (test == true) { 
     alert('working'); 
     } else { 
     alert('failed'); 
     } 
    </script> 
+0

Это не работает .. поскольку 'var' создает новую переменную внутри функции. – 13loodH4t

+0

«если вы не используете var перед переменной, она становится глобальной переменной» - 'test' ** требуется **, чтобы быть глобальной переменной, чтобы она читалась во втором элементе скрипта! – Quentin

+0

что случилось с моим кодом? – alifallahi

0

Есть два способа сделать это.
1) создать скрытый элемент и установить переменную из вашего первого скрипта в атрибут этого элемента. Это ваш скрытый элемент

<input type="hidden" id="hiddenVar"/> 

и может установить его в JavaScript, как

document.getElementById("hiddenVar").setAttribute("myAttr",test) 

Теперь вы можете получить его в следующем сценарии, как

document.getElementById("hiddenVar").getAttribute("myAttr") 

2) К.данные() вы можете прочитать об этом here

+0

Перемещение вещей в DOM является массовым сложным подходом к этой проблеме. Просто использование переменной будет работать нормально ... и ** делает ** в коде, указанном в вопросе. Все, что нарушит подход, используемый этим вопросом, скорее всего, также нарушит подход DOM. – Quentin

+0

скрытое поле ввода выглядит плохо для меня, и я действительно не хочу использовать это .. для 2) .data() Я посмотрю .. спасибо – 13loodH4t