2014-09-24 4 views
0

Итак, я пытаюсь создать окно регистрации с javascript, и мне это удалось, пока я не наткнулся на странную ошибку. Скрипт выводит это в HTML:Отображение случайных букв как значений атрибутов вместо элементов массива

<input type="f" name="i" alt="r" placeholder="s"> 

Вместо:

<input type="email" name="regemail" alt="email" placeholder="What's your email?"> 

И то же самое для остальных 2-х входов. Почему это происходит? Я пытался искать какие-либо ошибки, но консоль не дает мне никаких ошибок, и я не могу найти ничего плохого в коде, который я написал. Помощь приветствуется.

var firstInput = ["email", "regemail", "email", "What's your email?"]; 
 
    var secondInput = ["password", "regpassword", "password", "Choose a password"]; 
 
    var thirdInput = ["password", "confirmpassword", "confirmpassword", "Confirm password"]; 
 
    var types = ["type", "name", "alt", "placeholder"]; 
 
    var inputNumber = ["firstInput", "secondInput", "thirdInput"]; 
 
    var container = document.getElementById('usp-container'); 
 

 
    function register() { 
 

 
    var div = document.createElement('div'); 
 
    div.setAttribute('id', "register-popup"); 
 
    container.appendChild(div); 
 
    
 
    var form = document.createElement('form'); 
 
    form.setAttribute('method', "post"); 
 
    form.setAttribute('action', "processregistration.php"); 
 
    div.appendChild(form); 
 
    
 
    
 
     for (i = 0; i < 3; i++) { 
 
      
 
     function makeInputs(inputs) { 
 
      
 
     var tableRow = document.createElement('tr'); 
 
     form.appendChild(tableRow); 
 
     var tableData = document.createElement('td'); 
 
     tableRow.appendChild(tableData); 
 
     var input = document.createElement('input'); 
 
     
 
     for (j = 0; j < 4; j++) { 
 
      
 
      input.setAttribute(types[j], inputs[j]); 
 
     } 
 
      
 
     tableData.appendChild(input); 
 
     
 
     } 
 
      
 
     makeInputs(inputNumber[i]); 
 
    } 
 
    
 
    } 
 

 
    register();

+0

Вы должны переместить функцию makeInputs за пределами функции регистра. Если вы посмотрите на эту скрипку и нажмите JSHint, она покажет вам это предупреждение сбоку. http://jsfiddle.net/ej4e2p3L/ – Zack

+0

Какая разница? И любая идея, почему входные данные игнорируют CSS в отношении маржи слева и справа? Он работает, когда вы пишете разметку в HTML напрямую, но когда Javascript сгенерировал его, он выравнивается слева, а не посередине. – Chrillewoodz

ответ

2

У вас есть имена переменных в массиве

var firstInput = ["email", "regemail", "email", "What's your email?"]; 

var inputNumber = ["firstInput", "secondInput", "thirdInput"]; 

Тогда вы Перебор этих имен переменных, и пытается получить значение этой переменной с

inputNumber[0] 

и это доставит вам строку "firstInput", не массив, поэтому, когда вы делаете

inputNumber[0][0] 

вы получаете характер "f", не значение "email" из массива.

Чтобы использовать строку для ссылки на переменную, которую вы бы использовать кронштейн обозначения, так и в глобальном масштабе, что будет выглядеть как

window[inputNumber[0]][0]; 

, которая на самом деле не очень хороший способ, чтобы получить переменную

FIDDLE

Вы бы лучше не с объектом

var values = { 
    firstInput : ["email", "regemail", "email", "What's your email?"], 
    secondInput : ["password", "regpassword", "password", "Choose a password"], 
    thirdInput : ["password", "confirmpassword", "confirmpassword", "Confirm password"] 
} 

затем ссылки на массивы с ключевыми именами

values[inputNumber[0]][0] 

FIDDLE

+0

Превосходный ответ, хотя два вопроса. - окно [входы] [j], на что фактически стоит окно? - почему объекты лучше предыдущего решения? – Chrillewoodz

+0

'window' - это глобальный объект, когда вы определяете переменную в глобальной области с помощью переменной var, она добавляется к глобальному объекту, который является' window', и именно поэтому вы можете сделать 'window ['variable']' to получить его и т. д. – adeneo

+0

А я понимаю, спасибо за ответ. Помогли много. – Chrillewoodz

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