2016-09-01 32 views
1

我需要添加一個任務列表,然後單擊html表格中的一行我使用的是knockout js。問題是我只是從我的數據連續添加了最後一項任務,我需要在我的元素「$ taskSelected」中爲每個任務添加一個新的TR。這裏是我的代碼在包含HTML元素的JS var內添加HTML代碼

self.retrieveTask = function(data, event) { 
       if (event.type=="click") { 
        var id = data.Id; 
        var $taskSelected = event.currentTarget.parentElement.nextElementSibling; 
        $.get("@Url.Action("Method", "Controller")", { id: id }) 
         .done(function(data) { 
          $.each(data, function(key, value) { 
           var html = "<tr><td>" + 
            "</td>" + 
            "<td>" + 
            " <div >" + 
            + value.Type + 
            "</div> " + 
            "</td>" + 
            "<td>" + 
            " <div >" + 
            value.Id + 
            "</div> " + 
            "</td>" + 
            "</tr>"; 
           $taskSelected.innerHTML=html; 

          }); 

         }).fail(function() { 
          alert("error"); 
         }); 
       }; 

      } 

了var $ taskSelected包含另一行「<tr> </tr>」基本上㈡要嵌套行。有的建議請

+2

您不能嵌套[行](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr):「允許的內容:_零或更多​​或元素,或者他們的混合物「。如果嘗試創建嵌套行,「子」行的開始標記將關閉「父」行,並創建一個新行。 – Teemu

回答

1

試試這個:

self.retrieveTask = function(data, event) { 
      if (event.type=="click") { 
       var id = data.Id; 
       var $taskSelected = event.currentTarget.parentElement.nextElementSibling; 
       $.get("@Url.Action("Method", "Controller")", { id: id }) 
        .done(function(data) { 
         var html = ""; 
         $.each(data, function(key, value) { 
          html += "<tr><td>" + 
           "</td>" + 
           "<td>" + 
           " <div >" + 
           + value.Type + 
           "</div> " + 
           "</td>" + 
           "<td>" + 
           " <div >" + 
           value.Id + 
           "</div> " + 
           "</td>" + 
           "</tr>"; 

         }); 
         $taskSelected.innerHTML=html; 

        }).fail(function() { 
         alert("error"); 
        }); 
      }; 

     } 

我所做的只是移動var html以外的each循環。這可以確保您以前的所有HTML都保留在變量中,否則每次運行循環時都會覆蓋html(這就是爲什麼您只輸出最後一個;))。

+1

謝謝你的回答的確,它的範圍是錯的,順便說一下,我最糟糕的錯誤在於Teemu說我的桌子的結構。我修復它改變了我的表的結構,並添加$(html).insertAfter($ taskSelected)當前行後。再次感謝。 – UserEsp