2013-01-10 62 views
0

我有一個嵌套列表,裏面有任意數量的li和任意數量的ul,在li中每個li都有2個隱藏的輸入:一個id和一個父代的id。如何在嵌套子列表中通過JavaScript保存父ID

<ul> 
    <li> 
     <input type="hidden" name="question[id][]" value="'. $sub['id'] .'" /> 
     <input type="hidden" name="question[parent][]" value="'. $question['id'] .'" /> 
     <ul> 
      <li> 
      <input type="hidden" name="question[id][]" value="'. $sub['id'] .'" /> 
      <input type="hidden" name="question[parent][]" value="'. $question['id'] .'" /> 
      </li> 
     </ul> 
    </li> 
    <li> 
     <input type="hidden" name="question[id][]" value="'. $sub['id'] .'" /> 
     <input type="hidden" name="question[parent][]" value="'. $question['id'] .'" /> 
     <ul> 
      <li> 
      <input type="hidden" name="question[id][]" value="'. $sub['id'] .'" /> 
      <input type="hidden" name="question[parent][]" value="'. $question['id'] .'" /> 
      </li> 
     </ul> 
     <ul> 
      <li> 
      <input type="hidden" name="question[id][]" value="'. $sub['id'] .'" /> 
      <input type="hidden" name="question[parent][]" value="'. $question['id'] .'" /> 
      </li> 
     </ul> 
    </li> 

</ul> 

我使用jQuery排序排序的嵌套列表,而現在對它們進行排序後,我需要將相應的父ID保存到每一個項目的子表。

理論上每個子問題的父id是第二個最接近的ul的第一個輸入的值。 另外,如果沒有父母ul,那麼我想將父母標識設置爲0. 如何找到它?這是我到目前爲止有:

$('#reorder_form').submit(function(){ 
    $('li').each(function() { 
     $id = $(this).closest('ul').closest('li').find("input[name='question[id]']").val(); 
     if(typeof($id) == 'undefined') $id=0; 
     $(this).find("input[name='question[parent]']").val($id); 
    }); 
}); 

我不是100%肯定這是你如何通過每個輸入正確的循環,因爲我打兩次每一個。也許我應該通過李的循環?

回答

0

你想要上升到最接近的li,然後再次上升到最接近的li,然後返回到輸入。要真正語義:

$id = $(this).closest('li').closest('li').find('input[name^="question[id]"]').first().val(); 

未選中。我會在jsfiddle中做到這一點,但它似乎被破壞了。

$('li input[name^="question[parent]"]').each(function() { 
    var $id = $(this).closest('li').closest('li').find('input[name^="question[id]"]').val(); 
    if(typeof($id)=="undefined") $id=0; 
    $(this).val($id); 
}); 

只是一個音符,如果.save點的形式記住一個按鈕有(通常情況下)超過一個提交表單的方式。 $('#theform').on('submit', function(){...});是最好的方法。

而且

if(typeof($id) == undefined) 

我敢肯定,這將始終返回false,因爲typeof運算不會==不確定的,這將是一個值,它可以被「未定義」。

if(typeof($id) == "undefined") 
+0

那麼這將是最接近的ul,但我明白你在說什麼。 –

+0

'li'很好,你可以從你提供的html – Popnoodles

+0

中得到你,但是每個ul中可以有任意數量的li。你不需要使用.parents()上去嗎? –

0

這是代碼保存任何數量的鋰的含有任何數量的UL的包含從問題cooresponding HTML任意數量李的的的的ID和父ID。我承認這有點冒險,但這是我想出來的。希望它能幫助別人。

 $('#reorder_form').submit(function(){ 
      $('li input[name^="question[parent]"]').each(function() { 
       $ul = $(this).closest('ul').parent().closest('ul'); 
       $attr = $ul.attr("class"); 
       if(typeof($attr) == 'undefined') 
        $id=0; 
       else 
        $id = $ul.find("li input[name^='question[id]']").val(); 
       $(this).val($id); 

      }); 
     });