2016-09-14 10 views
-2

私はLI要素内のIDを持つ入力から値を取得しようとしています。getElementsByTagNameを使用してからgetElementByIdを使用する

しかし、私がgetElementsByTagName()[0].getElementsById()と呼んだ場合、numLi[i].getElementById is not a functionはnumLiのLI要素の配列になります。ここで私はラインvar ff = numLi[i].getElementById('tagOne');

<form action="javascript:void(0);"> 
<div class="col-md-3"> 

    <div id="enlacesList"> 
     <ul id="uList"> 

       <li class='listaLink'><input type="text" id="tagOne" class="tags" placeholder="Tags" autocomplete="off"></li> 
       <li class='listaLink'><input type="text" id="tagOne" class="tags" placeholder="Tags" autocomplete="off"></li>  

     </ul> 
    </div> 
    <button id="addgregador" type="button" autocomplete="off"><span class="glyphicon glyphicon-plus"></span></button><button id="desadd" type="button" autocomplete="off"><span class="glyphicon glyphicon-minus"></span></button> 
</div> 
<div class="col-md-9" id="containerTexto"> 
    <div id="textoPregunta"> 
     <div id="textHeading"><input type="text" name="headingOne" id="inputHead" placeholder="Titulo de la pregunta" autocomplete="off"></div> 
     <div id="textContent"><textarea id="inputPara" rows="33" cols="84" placeholder="Respuesta, explicación..." autocomplete="off"></textarea></div> 
     <input type="submit" id="editOk" value="Enviar" class="btn btn-primary" autocomplete="off"><input type="reset" id="editNot" value="Cancelar" class="btn btn-danger" autocomplete="off"> 
    </div> 
</div> 

プログラムブレークにアクセスしようとしている私の全体のJSコード

$('form').submit(function() 
{ 
    var headOne = document.getElementById('inputHead').value; 
    var archive = document.getElementById('inputPara').value; 
    var numLi = document.getElementById('uList').getElementsByTagName('li'); 
    var tagsToPost = ''; 
    for(i = 0;i<numLi.length;i++) 
    { 
     var ff = numLi[i].getElementById('tagOne'); 

     if(i<=numLi-1) 
     { 
      tagsToPost = tagsToPost + ff.value + ','; 
     } 
     else 
     { 
     tagsToPost = tagsToPost + ff.value; 
     } 
    } 

}); 

とHTML部分です。

+6

同じIDのページに複数の要素があるのはなぜですか? – epascarello

+0

@epascarello 2つのボタンが 'ul'タグの下に作成されているので、私はIDで呼び出すことができるので同じIDを使いました。問題の解決策は' getElementsByTagName( 'input')[0 ] 'の代わりに' getElementById( '' tagOne ') ' – Yacomini

+1

同じIDを持つ複数の要素を持つことはできません。代わりにクラスを使用してください。 – JJJ

答えて

1

getElementById関数は、documentにのみ定義されており、一般的なDOMノードでは定義されていません。そのMDN articleを参照してください。これは、IDはドキュメントレベルで一意でなければならないため、個々の要素にIDを割り当てるのは意味がないためです。

まず、1つのドキュメント内の複数の要素に同じIDを使用しないでください。 LI要素ごとに入力が1つしかない場合は、id属性を削除し、次のように取得します。

var ff = numLi[i].children[0]; 
+0

私はdifferents要素で同じIDを使うべきではないことを知っていましたが、jsによって呼び出されるだけでした(自分のやり方がうまくいくと思ったので)。 'numLi [i] .getElementsByTagName( 'input')[0]' – Yacomini

-2

あなたのしたいような何か: VARのx = getElementsByTagNameの()[0] document.getElementsById(x)の.innerHTML = .... .IDを?ただのdocument.getElementById( "tagOne")を呼び出して値の値を取得するために

document.getElementsById(document.getElementsByTagName("Example:Div")[0].id) 
1

:。

これはに凝縮することができます。

IDフィールドはHTMLでも一意でなければならないので、2番目のIDフィールドはtagTwoなどの名前に変更する必要があります。 IDを使用すると、getElementByIdを使用するときにIDを使用して直接移動できます。これは不適切なHTMLであり、通常、同じIDフィールドを持つ2つの要素を持つためにエラーをスローします。 (IDによるインデックス作成)

私はあなたがドキュメント以外のものでgetElementByIdを使うことはできないと思います。 UCSDでWeb開発クラスを受講して以来、しばらくしています。

+0

実際には、ドキュメント上でのみ 'getElementById'を呼び出すことができます。 – vlaz

関連する問題