没有表格如何提交动态数据?

时间:2018-07-10 04:22:45

标签: javascript jquery spring forms javabeans

我正在以Java Bean的形式获取数据,并将每个值插入表中。
首先,以常见方式检索值。
但是我添加了一些Javascript源,以便在单击附近的任何区域时都可以修改该值。
现在,如果修改后有任何更改,我也想将数据保存在数据库中。
我该怎么办?

这是我的HTML代码

<table class="bg-light table table-hover" style="overflow:hidden">
    <th>Word</th>
    <th>Dialogue</th>
    <th>Practice</th>
    <c:forEach items="${list}" var="engboardVO">
    <tr>
        <td data-editable>${engboardVO.word}</td>
        <td data-editable>${engboardVO.dialogue}</td>
        <td data-editable>${engboardVO.practice}</td>
    </tr>
    </c:forEach>
</table>

和Javascript

$("body").on("click", "[data-editable]", function() {
    var $el = $(this);
    /*  var $input = $('<input style="width:500px; height:100px"/>').val( $el.text() ); */
    var $input = $('<textarea rows=5 style="width:500px"/>').val($el.text());
    $el.replaceWith($input);
    var save = function() {
        var $td = $("<td data-editable />").text($input.val());
        $input.replaceWith($td);
    };
    $($input).blur(function() {
        save();
    })
});

2 个答案:

答案 0 :(得分:1)

您可以使用ajax提交无格式的数据。 我可以看到您正在使用jQuery库。因此,我正在基于该库编写代码。

在HTML中:

<table class="bg-light table table-hover" style="overflow:hidden">
    <th>Word</th>
    <th>Dialogue</th>
    <th>Practice</th>
    <c:forEach items="${list}" var="engboardVO">
    <tr>
        <td data-name="word" data-editable>${engboardVO.word}</td>
        <td data-name="dialogue" data-editable>${engboardVO.dialogue}</td>
        <td data-name="practice" data-editable>${engboardVO.practice}</td>
    </tr>
    </c:forEach>
</table>

在javascript中:

    $("body").on("click", "[data-editable]", function() {
    var $el = $(this);

    var $input = $('<textarea rows=5 style="width:500px"/>').val($el.text());
    $el.html($input);
    var field_name = $el.attr('data-name');
    var save = function() {
        var $val= $input.val();

        $.ajax({
            type: "POST",
            url: "update-url",
            data: {fieldname: field_name, fieldvalue:$input.val()},
            dataType: "json",
            success: function(msg) {
               // do something on success
                $el.html($val);
            },
            error: function(msg){
              // do something on error
            }
        });
    };
    $($input).blur(function() {
        save();
    })
    });

然后在服务器端,您可以将fieldvalue作为fieldname的值保存在数据库中。

基本上我们在这里做的是:

  1. 在td标签中添加了属性数据名称,其值可以与表中的字段名称相关。

  2. 使用var field_name = $ el.attr('data-name');获取javascript中属性的名称。

  3. 在ajax调用中使用发布请求将field_name和该字段的值传递给服务器。

      $.ajax({
            type: "POST",
            url: "update-url",
            data: {fieldname: field_name, fieldvalue:$input.val()},
            dataType: "json",
            success: function(msg) {
               // do something on success
                $el.html($val);
            },
            error: function(msg){
              // do something on error
            }
        });
    
  4. 现在在服务器端,您需要按正常方式获取此数据,以便在提交表单时为发布请求获取并将其保存在数据库中。

  5. URL与您在表单标签中提供的操作相同。

编辑: 现在检查。您正在替换td,而必须替换td中的html。

答案 1 :(得分:0)

如果您没有表格或由于某些原因而无法使用表格,请不要担心

您仍然可以阅读网页的输入并使用它们或将其发送到服务器。

请参见以下简单示例:

var inputs = document.getElementsByTagName('input');
var data = []
for (index = 0; index < inputs.length; ++index) {
    // deal with inputs[index] element.
    data.push(inputs[index].value)
}

var json = JSON2.stringify(data);

$.ajax({
    type: "POST",
    url: "your-api-url",
    data: json,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        // done code
    }
});