Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过嵌套子列表中的javascript保存父id_Php_Jquery - Fatal编程技术网

Php 如何通过嵌套子列表中的javascript保存父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'

我有一个嵌套列表,其中包含任意数量的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'] .'" />
            </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);

            });
        });