Php 如何通过嵌套子列表中的javascript保存父id
我有一个嵌套列表,其中包含任意数量的li和任意数量的ul,其中每个li都有两个隐藏输入:一个id和一个父级id。Php 如何通过嵌套子列表中的javascript保存父id,php,jquery,Php,Jquery,我有一个嵌套列表,其中包含任意数量的li和任意数量的ul,其中每个li都有两个隐藏输入:一个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'] .'" />
<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>
我不能100%确定这是如何正确循环每个输入的,因为每个输入我都打了两次。也许我应该循环查看li?您想先转到最近的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')。在('submit',function(){…})上代码>是最好的方法
也
我很确定它总是返回false,因为typeof不会==undefined,它将是一个值,可能是“undefined”
if(typeof($id) == "undefined")
这是一段代码,用于保存任意数量的li(包含任意数量的ul(包含任意数量的li))的id和父id,以及问题中的html。我承认这有点粗俗,但这正是我想到的。希望它能帮助别人
$('#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);
});
});
嗯,它必须是最接近的ul,但我明白你的意思。
li
可以从你提供的html中找到,但每个ul中可能有任意数量的li。您不需要使用.parents()来上升吗?如果您编辑了您的问题以显示这一点,这将非常有用。不,closest()
也会上升。这是我说的第一句话
if(typeof($id) == "undefined")
$('#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);
});
});