2013-11-29 3 views
0

Это HTML часть:не может получить доступ к массив вне функции, независимо от того, что я делаю

<form> 
<input id="input" type="text"/> 
<button id="button"> Add! </button> 
</form> 
<div class="list"></div> 

Сценарий, как это:

var input = document.getElementById("input"); // save the object 
var button = document.getElementById("button"); 

var myArray = []; 



button.onclick = function alerted(){ 
    myArray.unshift(input.value); // get the value 
    return myArray; 


}; 

alerted(); 
document.write(myArray); 

Проблема заключается в том туАггау всегда остается оригинал пустой массив, независимо от того, что я делаю. Я хотел бы быть просветленным, спасибо!

+0

Пожалуйста, noete, что, хотя именованные функциональные выражения полезны, они [разбиты в IE] (http://kangax.github.io/nfe/#jscript-bugs) и не должны использоваться. – RobG

ответ

0

включаю window.onload, так что можно считать, что вход и кнопка не является нулевым

window.onload = function(){ 
var input = document.getElementById("input"); // save the object 
var button = document.getElementById("button"); 

var myArray = ["hello"]; 



button.onclick = function(){ 
    myArray.unshift(input.value); // get the value 
    document.write(myArray); 
}; 

} 
+0

, но document.write (myArray) по-прежнему получает исходный пустой массив, а не новый, состоящий из входов из формы. – user3047835

+0

как насчет использования myArray.push (input.value); ? – Hellgorithm

+0

Я обновил свой ответ :-) – Hellgorithm

1

Вы должны использовать имя переменной, назначенной функции, в данном случае button.onclick() будет делать. Именованное функциональное выражение позволяет использовать имя внутри тела, но вы должны использовать имя ссылки, а не имя функции, чтобы называть его в другом месте.

button.onclick = function alerted() { 
    myArray.unshift(input.value); // get the value 
    return myArray; 
}; 

button.onclick(); 

Подумайте об этом так - вы присваиваете объект функции в переменную - это функциональный объект может или не может иметь имя (анонимно). Так что, если ваша функция имеет имя, которое вы можете отобразить его следующим образом:

button.onclick.name //=> alerted 
+0

Спасибо за ответ, но он все еще не распечатывает новый массив, не знаю почему. – user3047835

+0

Можете ли вы опубликовать скрипку, чтобы воспроизвести проблему. http://jsfiddle.net/ – elclanrs

+0

Да ничего, чтобы воспроизвести проблему. Вышеизложенное должно работать. – elclanrs

0

Следующая:

button.onclick = function alerted(){ 
    myArray.unshift(input.value); // get the value 
    return myArray; 
}; 

Назначает именованный выражение функции в обработчик щелчка кнопки. Функция должна быть доступной только по имени с предупреждением изнутри функции. К сожалению, IE is broken (на самом деле jScript сломан) в этом отношении и делает его доступным как глобальную переменную.

Вы, вероятно, следует использовать функцию выражения:

function alerted(){ 
    myArray.unshift(input.value); // get the value 
    return myArray; 
} 

button.onclick = alerted; 

Пользователи будут добавлены только к массиву, когда кнопка нажата, до этого он будет пустым. Первоначально вход не имеет значения, поэтому нажатие кнопки (или вызов функции) будет добавлять только пустые строки.

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