2017-03-15 14 views
0

私はTrello APIに接続し、ボードからリストを作成しています。私は各リストからすべてのカードをリストしようとしています。 value属性からListIDを取得すると、 "undefined"が返されます。どうしてこれなの?

私はHTMLは次のように出力しているdocument.getElementById("demo").innerHTML = $(".board").val();

//HTML 
<label>Choose from a List of Boards</label> 
<div id="output"></div> 

<label>Display Cards Below for Board Selected</label> 
<div id="outputCards"></div> 

<p id="demo"></p> 

//Javascript 
    var $boards = $("<select>") 
      .attr("id", "boards") 
     .text("Loading Boards...") 
     .appendTo("#output"); 

    Trello.get("/boards/BOARD_ID/lists", function(boards) { 
     $boards.empty(); 
     $.each(boards, function(ix, board) { 
      $("<option>") 
      .attr({href: board.url, target: "trello", value : board.id, name : board.id, id : board.id}) 
      .addClass("board") 
      .text(board.name) 
      .appendTo($boards); 
     }); 
    }); 


    var $cards = $("<div>") 
     .text("Loading Cards...") 
     .appendTo("#outputCards") 
     .appendTo("#demo"); 

    // This is where I'm trying to return the value 
    document.getElementById("demo").innerHTML = $(".board").val(); 

    var resource = "lists/LIST_ID/cards"; 
    Trello.get(resource, function(cards) { 
     $cards.empty(); 
     $.each(cards, function(ix, card) { 
      $("<a>") 
      .attr({href: card.url, target: "trello"}) 
      .addClass("card") 
      .text(card.name) 
      .appendTo($cards); 
     }); 
    }); 

でそれをプリントアウトしています:

<label>Choose from a List of Boards</label> 
    <div id="output"> 
     <select id="boards"> 
      <option target="trello" value="LIST_ID" name="LIST_ID" id="LIST_ID" class="board"> 
       List One 
      </option> 
      ... 
     </select> 
    </div> 

<label>Display Cards Below for Board Selected</label> 
<div id="outputCards"></div> 

<p id="demo">undefined</p> 
+1

のようなものを考えるだろうが、私は'推測しているTrello.get() '非同期操作を行いますので、'」.boardあなたの '$("。board ").val()'行が実行されるときに、要素はまだ生成されていません。また、 '$("。board ")'がどの要素とも一致しない場合、 '.val()'は 'undefined'を返します。 '.get()'の結果に依存するコードは、そのコールバック関数かそこから呼び出された他の関数の中にある必要があります。 – nnnnnn

答えて

1

私はここでの主な問題は、boardクラスは唯一の要素に追加されていることだと思いますTrello.getコールバックにあります。

このコードは非同期で実行されるため、コールバック内のコードが実行される前に$(".board").val()を実行している可能性があります。つまり、 `$("。board ")は要素を返しませんでした。

私は `Trello`が何であるかを知らないこの

Trello.get("/boards/BOARD_ID/lists", function(boards) { 
     $boards.empty(); 
     $.each(boards, function(ix, board) { 
      $("<option>") 
      .attr({href: board.url, target: "trello", value : board.id, name : board.id, id : board.id}) 
      .addClass("board") 
      .text(board.name) 
      .appendTo($boards); 
     }); 
     // This is where I'm trying to return the value 

     $('#board').change(function() { 
      document.getElementById("demo").innerHTML = $(".board:selected").val(); 
     }); 
    }); 
+0

ありがとうございました!しかし...今では最初のリスト(デフォルトでロードされる)のIDを取得していますが、