我有一个嵌套列表,里面有任意数量的li和li里面的任意数量的ul,其中每个li都有2个隐藏的输入:id和父ID的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 sortable来对嵌套列表进行排序,现在在对它们进行排序之后,我需要将相应的父ID保存到子列表中的每个项目。
理论上,每个子问题的父ID是第二个最接近的ul的第一个输入的值。 此外,如果没有父ul,那么我想将父ID设置为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%确定这是你如何正确循环每个输入因为我每次击中两次。也许我应该循环使用li?
答案 0 :(得分: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不会== undefined,它将是一个值,可能是'undefined'。
if(typeof($id) == "undefined")
答案 1 :(得分:0)
这是保存任意数量的li的id和父ID的代码,其中包含任意数量的ul,其中包含来自问题的相应html的任意数量的li。我承认它有点hackish,但这是我想出来的。希望它可以帮到某人。
$('#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);
});
});