2

我一直在努力处理数据以及如何fnGetNodes在提交时将数据正确推送回表单。

我已经让 jquery 正常工作。我可以看到文档中描述的选定值。我的问题是如何将其sData推回 POST 中的服务器?

我知道这一定很简单,但我显然太专注于树而看不到森林。我将不胜感激任何帮助!

<script style="text/javascript">

    $(document).ready(function() {
        $('#form').submit( function() {
            var sData = $('input', oTable.fnGetNodes()).serialize();
            alert( "The following data would have been submitted to the server: \n\n"+sData );
            return false;
        });

        oTable = $('#data_table').dataTable();
    });
</script>

我的 HTML 表单如下所示(为清晰起见已缩短)

<table id="data_table">
            <thead>
                <tr>
                    <th>Select</th>
                    <th>Question</th>
                </tr>
            </thead>
            <tr id=0><td><label for="id_questions_0"><input type="checkbox" name="questions" value="103" id="id_questions_0" /></label></td><td>D1. Example of a multiple choice question</td></tr>
<tr id=1><td><label for="id_questions_1"><input type="checkbox" name="questions" value="104" id="id_questions_1" /></label></td><td>E1. Example of a multiple choice question</td></tr>
<tr id=2><td><label for="id_questions_2"><input type="checkbox" name="questions" value="105" id="id_questions_2" /></label></td><td>G. Example of a multiple choice question</td></tr>
<tr id=3><td><label for="id_questions_3"><input type="checkbox" name="questions" value="106" id="id_questions_3" /></label></td><td>H. Example of a multiple choice question</td></tr>

编辑

警报向我展示了这一点。 questions=103&questions=104&questions=105&questions=106&questions=100&questions=101&questions=102

POST(使用开发人员工具(向我展示了这一点。

csrfmiddlewaretoken:a2c3ed6e1bfee9fce0b7412553aa2080
name:Phase-1 Pre-Drywall
priority:1
description:Pre-Drywall inspection items
use_for_confirmed_rating:on
use_for_sampling:on
data_table_length:10
questions:103
questions:104
questions:105
questions:106
submit:Submit

所以我需要以某种方式将前者转换为后者使用 jquery有人可以帮我解决这个问题吗

谢谢

4

1 回答 1

3

结果证明(正如预期的那样)非常简单。

        var oTable = $('#data_table').dataTable();
        // This will collect all of the nodes which were checked and make sure they get
        // pushed back.
        $('#form').submit(function () {
            $("input[name='question']").remove();  //Remove the old values
            $("input:checked", oTable.fnGetNodes()).each(function(){
                $('<input type="checkbox" name="questions" ' + 'value="' +
                  $(this).val() + '" type="hidden" checked="checked" />')
                    .css("display", "none")
                    .appendTo('#form');
            });
        });
于 2012-05-08T20:15:06.157 回答