2016-07-01 5 views
0

のクラスに複数のdivタグがあり、その中に入力要素とボタン要素があります。私は入力タグから値を取得する関数を作成しようとしています。ボタンをクリックすると、次の入力とボタンフィールドがポップアップし、別の情報を入力するように求められます。 。ただし、ここで機能していないのはjsfiddleです。ボタンの組み合わせに関数を追加するにはどうすればいいですか

HTML

<div id="container"> 


    <div class="opt active"> <input type="text" placeholder ="Enter Name"name="name"> <button>OK</button> 
    </div> 

    <div class="opt"> 
     <input type="text" placeholder ="Enter Age" name="age"> <button>OK</button> 
    </div> 

    <div class="opt"> 
     <input type="text" placeholder ="Enter Race" name="race"> <button>OK</button> 
    </div> 

    <div class="opt"> 
     <input type="text" placeholder ="Enter Sex" name="sex"> <button id="done">Done</button> 
    </div> 


    </div> 

Javascriptを

function init(){ 

    var opt = document.getElementsByClassName('opt'); 

    var num = 0; 
    var prop = []; 
    var propVal = []; 


    for (var i = 0 ; i < opt.length; i++) 
    { 
    opt[i].querySelector('input').value = ""; 
    } 



    opt[num].querySelector('button').onclick = function() 
    { 
    prop[num] = opt[num].querySelector('input').name; 
    propVal[num]= opt[num].querySelector('input').value; 

    opt[num].className = "opt"; 
    opt[num+1].className ="opt active"; 
    console.log(prop +" "+ propVal); 
    num++; 
    };//button function 






} 


init(); 
+0

?フォームは通常どおり提出されるべきですか? – Shaggy

+0

最後のボタンをクリックしたときの@Shaggyは、入力タグに入れた情報を表示する別の関数をアクティブにするはずです。しかし、私はまだそれを作成していない –

答えて

1

あなたにもループ内でクリックハンドラをバインドする必要があります。代わりにオブジェクトを使用できるときに、プロパティを格納するために並列配列を使用する必要もありません。

次の1のクラスを変更しようとする前に、「次の入力」があることを確認してください。最後のボタンをクリックする上でどうするか

var opt = document.getElementsByClassName('opt'), 
 
    num = 0, prop = {}; 
 

 
function nextInput() { 
 
    var input = opt[num].querySelector('input'); 
 
    prop[input.name] = input.value; 
 
    console.log(prop); 
 

 
    opt[num].className = "opt"; 
 
    if (num + 1 < opt.length) { 
 
    opt[num + 1].className = "opt active"; 
 
    num++; 
 
    } else { 
 
    // submit? 
 
    } 
 
} 
 

 
for (var i = 0; i < opt.length; i++) { 
 
    opt[i].querySelector('input').value = ""; 
 
    opt[i].querySelector('button').onclick = nextInput; 
 
}
.opt { display: none } 
 
.opt.active { display: block }
<div id="container"> 
 
    <div class="opt active"> 
 
    <input type="text" placeholder="Enter Name" name="name"> 
 
    <button>OK</button> 
 
    </div> 
 
    <div class="opt"> 
 
    <input type="text" placeholder="Enter Age" name="age"> 
 
    <button>OK</button> 
 
    </div> 
 
    <div class="opt"> 
 
    <input type="text" placeholder="Enter Race" name="race"> 
 
    <button>OK</button> 
 
    </div> 
 
    <div class="opt"> 
 
    <input type="text" placeholder="Enter Sex" name="sex"> 
 
    <button id="done">Done</button> 
 
    </div> 
 
</div>

+0

私は問題を解決するためのおかげで感謝します。私はあなたもforEachメソッドでそれを行うことができると感じています。しかし、forEachメソッドでopt配列を使用しようとすると、forEachが関数ではないというエラーが表示されます。 –

+0

ああ、そうです。これは、['getElementsByClassName'](https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName)は実際に配列を返さないためです。これは 'forEach'のような配列メソッドを持たない[' HTMLCollection'](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection)を返しますが、確かに1のように見えます(オブジェクトもブラケット記法を使用できるため)。 [この質問](http://stackoverflow.com/q/222841/5743988)を見て、配列メソッドを利用できるようにしてください。 – 4castle

関連する問題