2012-05-17 3 views
-1

Я хочу сделать следующее в моем сценарии:Доступ к локальной переменной из другой функции

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

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

HTML код:

<a href=''onclick='_default();return false;'>Link</a> 
<div id='mydiv'></div> 

Javascript:

function _default() { 
    var x = document.getElementById('mydiv'); 
    var h = x.offsetHeight; 
    _main(x, h); 
} 
_default(); 

function _main(x, h) { 
    alert(x); 
    alert(h); 
} 

Вы увидите, что этот скрипт выполняет _default() на странице загрузки. _default() функция передает 2 параметра в _main() и выполняет функцию _main(), выдавая 2 предупреждения с переменными x и h. Но как это сделать, чтобы эти 2 предупреждения были сброшены, когда я нажимаю на ссылку (см. Выше код html)?

+0

Почему вы задаете новый вопрос об этом? Ваш предыдущий вопрос касается той же проблемы: http://stackoverflow.com/questions/10621495/passing-variables-values. Если вы не понимаете моего ответа, попросите разъяснения, но не задавайте новый вопрос. –

+1

Я обновил свой ответ на примере, так как кажется, что вы не знаете, как связать обработчики событий с JavaScript (вы никогда не отвечали на мой последний комментарий). Я также рекомендую прочитать http://www.quirksmode.org/js/introevents.html, чтобы узнать основы обработки событий. –

ответ

0

Если я понял вашу проблему, то это означает, что когда вызывается default() в первый раз, страница не была полностью отображена, поэтому «mydiv» будет null.

Если вы удалите строку, которая вызывает _default(), а вместо этого вызывают ее из bodyload, вы должны обнаружить, что она работает должным образом.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
    <script type="text/javascript" language="javascript"> 
     function _default() { 
      var x = document.getElementById('mydiv'); 
      var h = x.offsetHeight; 

      _main(x, h); 
     } 

     function _main(x, h) { 
      alert(x); 
      alert(h); 
     } 
    </script> 
</head> 
<body onload="_default();"> 
    <a href='' onclick='_default();return false;'>Link</a> 
    <div id='mydiv'> 
    </div> 
</body> 
</html>` 
0

код не работает, потому что его выполняется до DOM готова ... изменить его следующим образом:

function _default() { 
    var x = document.getElementById('mydiv'); 
    var h = x.offsetHeight; 
    _main(x, h); 
} 

function _main(x, h) { 
    alert(x); 
    alert(h); 
} 

window.onload = _default; 

Это вызывает функцию _default() будет выполняться, когда load событие инициируется ... you can read more about the window.onload method here

Working example here

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