2015-06-20 2 views
-1

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

<html> 
    <head> 
    <title>test</title> 
    </head> 
    <body> 
     <script lang="JavaScript" type="text/javascript"> 
     // l = prompt("Your name :"); // if i remove the comment it works 
      function f(E) { 


       l = prompt("Your name :"); 
       E["Name"] = l; 
       l = prompt("Your Age :"); 
       E["Age"] = l; 
       l = prompt("Your Note :"); 
       E["Note"] = l; 

      } 
     // l = prompt("Your name :"); // if i remove the comment it works 
      function g(E) { 
       for (ind in E) { 

        document.write("E[" + ind + "]=" + E[ind]); 
       } 
      } 
      E = newarray(3); 
      //l = prompt("Your name :"); // here if i remove the comment nothing happen 
      f(E); 
      g(E); 
</script> 

    </body> 
</html> 
+3

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

+2

«Ничего не случилось» не совсем правильно (также грамматически ;-)) - в вашем коде есть ошибка, предотвращающая дальнейшее выполнение. Вы должны посмотреть на JS-Console (различные способы доступа к нему в зависимости от браузера), чтобы увидеть err-msg .... – MBaas

ответ

1

Вы не хотите массив на всех, вы хотите объект. Вы можете создать объект с использованием инициализатора объекта:

E = {}; 

Side Примечание 1: Ваш код становится жертвой The Horror of Implicit Globals повсюду. Вам нужно объявить переменные.


Сторона Примечание 2; Используя document.write после завершения полного разбора страницы (например, после prompt), косвенно вызовет document.open, что полностью уничтожит вашу страницу. Если вы хотите добавить страницу, используйте DOM.


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

function getData() { 
 
    var data = {}; 
 
    data.Name = prompt("Your name :"); 
 
    data.Age = prompt("Your Age :"); 
 
    data.Note = prompt("Your Note :"); 
 
    return data; 
 
} 
 

 
function showData(data) { 
 
    for (var key in data) { 
 
    display("E[" + key + "]=" + data[key]); 
 
    } 
 
} 
 

 
function display(msg) { 
 
    var p = document.createElement('p'); 
 
    p.innerHTML = msg; 
 
    document.body.appendChild(p); 
 
} 
 

 
var d = getData(); 
 
showData(d);

+0

Пожалуйста, скажите мне, почему я не могу использовать document.write? – cip

+0

@cip: Я сделал: * «Использование' document.write' ... будет неявно вызывать 'document.open', что полностью уничтожит вашу страницу ...» * «Вытрите», я имею в виду, что он удалит все содержимого на странице и заменить его. Я полагаю, ваша текущая страница не имеет никакого контента, так что это будет хорошо, но в целом 'document.write' после того, как основной синтаксический анализ сделан, - это no-no. (Некоторые утверждают, что это всегда * нет-нет.) –

0

Использование new Array(3) вместо newarray(3):

<html> 
 
    <head> 
 
    <title>test</title> 
 
    </head> 
 
    <body> 
 
     <script lang="JavaScript" type="text/javascript"> 
 
     // l = prompt("Your name :"); // if i remove the comment it works 
 
      function f(E) { 
 

 

 
       l = prompt("Your name :"); 
 
       E["Name"] = l; 
 
       l = prompt("Your Age :"); 
 
       E["Age"] = l; 
 
       l = prompt("Your Note :"); 
 
       E["Note"] = l; 
 

 
      } 
 
     // l = prompt("Your name :"); // if i remove the comment it works 
 
      function g(E) { 
 
       for (ind in E) { 
 

 
        document.write("E[" + ind + "]=" + E[ind]); 
 
       } 
 
      } 
 
      E = new Array(3); 
 
      //l = prompt("Your name :"); // here if i remove the comment nothing happen 
 
      f(E); 
 
      g(E); 
 
</script> 
 

 
    </body> 
 
</html>

Здесь вы хотели бы использовать объект вместо массива.

<html> 
 
    <head> 
 
    <title>test</title> 
 
    </head> 
 
    <body> 
 
     <script lang="JavaScript" type="text/javascript"> 
 
     // l = prompt("Your name :"); // if i remove the comment it works 
 
      function f(E) { 
 

 

 
       E["Name"] = prompt("Your name :"); 
 
       E["Age"] = prompt("Your Age :"); 
 
       E["Note"] = prompt("Your Note :"); 
 

 
      } 
 
     // l = prompt("Your name :"); // if i remove the comment it works 
 
      function g(E) { 
 
       for (ind in E) { 
 

 
        document.write("E[" + ind + "]=" + E[ind]); 
 
       } 
 
      } 
 
      var E = {}; 
 
      //l = prompt("Your name :"); // here if i remove the comment nothing happen 
 
      f(E); 
 
      g(E); 
 
</script> 
 

 
    </body> 
 
</html>

+0

За исключением того, что OP фактически не хочет иметь массив вообще, и нет причин давать ему длину 3, если он не используется для хранения чего-либо в индексах 0, 1 или 2. –

+0

Согласен. Я только что указал на ошибку. – Vikash

0

Предложения:

Сначала это должно быть E = новый Array (3); Поскольку E является глобальной переменной (и используется в вашей первой функции), лучше всего объявить ее перед вашей первой функцией. Хотя это необязательно, было бы полезно при отладке предоставить каждому из своих приглашений собственное имя переменной.