2014-02-16 6 views
2

Я хочу использовать Mystring как параметр alert, поэтому, когда мышь по ссылке, он будет предупреждать Mystring?Использование предупреждения с переменным параметром?

<html> 
<head> 
    <script> 
    window.onload = initAll; 

    function initAll() { 
     var Mystring = "Hello world"; 
     var aTag = document.getElementsByTagName('a')[0]; 
     aTag.onmouseover = runAlert; 
    } 

    function runAlert() { 
     alert(Mystring); 
    } 
    </script> 
</head> 
<body> 
    <a href="#">Over me</a> 
</body> 
</html> 

ответ

3

Ваша переменная Mystring является областью видимости внутри initAll функции. Он недоступен вне этой функции. Что вы можете сделать, это определить его снаружи и присвоить значение в initAll, как это:

window.onload = initAll; 
var myString; 

function runAlert() { 
    alert(myString); 
} 

function initAll() { 
    myString = "Hello world"; 
    var aTag = document.getElementsByTagName('a')[0]; 
    aTag.onmouseover = runAlert; 
} 

Если это все, что вы собираетесь делать, вы можете определить в линии анонимной функции, как этот

aTag.onmouseover = function() { 
     alert(myString); 
    }; 

Примечание: Обычно переменные JavaScript называются с помощью соглашения camelCase.

Примечание 1: Всегда полезно определить вызываемые функции перед вызывающими функциями, как я показал в своем ответе.

1

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

function initAll() { 
    var Mystring = "Hello world"; 
    var aTag = document.getElementsByTagName('a')[0]; 
    aTag.onmouseover = function(){runAlert(Mystring)}; 
} 

function runAlert(str) { 
    alert(str); 
} 

Смотрите здесь: http://jsfiddle.net/VZ69x/

+0

на Line4, что различный между Atag. onmouseover = function() {runAlert (Mystring)}; и aTag.onmouseover = runAlert (Mystring) ;? спасибо – sopanha

+1

Это приведет к запуску функции 'runAlert' в init и присвоит ее результат методу onmouseover. Он не будет работать так, как вы ожидали, так как вы получите предупреждение при загрузке страницы. Таким образом, onmouseover - это функция, вызывающая другую функцию. – Shomz

+0

Почему onmouseover не работает, если я вызываю функцию только своим именем. aTag.onmouseover = runAlert (Mystring); ? – sopanha

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