0

私は、任意の数のliとliの内部に任意の数のulを含むネストされたリストを持っています。ここで、すべてのliには2つの非表示の入力があります。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 は、2 番目に近い 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);
    });
});

各入力を 2 回ヒットしているため、これが各入力を適切にループする方法であるとは 100% 確信が持てません。おそらく、代わりにliをループする必要がありますか?

4

2 に答える 2

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) 

typeofは==undefinedではなく、値になり、「undefined」になる可能性があるため、これは常にfalseを返すと確信しています。

if(typeof($id) == "undefined")
于 2013-01-10T13:12:03.733 に答える
0

これは、質問からの対応するhtmlを使用して、任意の数のliを含む任意の数のliを含む任意の数のliの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);

            });
        });
于 2013-01-11T15:14:45.010 に答える