如何仅在表单中存在数据时保存数据?

时间:2012-02-08 09:54:46

标签: jquery

我有这个代码,我试图每5秒保存一次数据,只有表格中有数据。但是当页面加载时,在5秒的间隔后会出现“Form Saved”消息。并且在此之后不会出现数据是否以表格形式存在

    $(document).ready(function () {
        $(":input").each(function() {
            if($(this).val() !== "") 
                window.setInterval(saveData, 5000);
        }); 
    });

    function saveData(){
       $.ajax({
           type: 'POST',
           url: "SaveDraft.aspx",
           data: {
               name: $('#frmTaxSheet').serialize()
           },
           cache: false,
           error: function(xhr, status, errorThrown) {
               alert(errorThrown + '\n' + status + '\n' + xhr.statusText);
           },
           success: function(response) {
                $('#notify').text("Form Data Saved").fadeOut(2000, function() { 
                    $(this).remove();
                });
            ;}
       });
    }

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

试试这个:

$(document).ready(function () {
    window.setTimeout(saveDraft, 5000);
});

function saveData(){
    var askAjax = true;
    $(":input").each(function() {
        if($(this).val() === "") { askAjax &= false; }
    });

    if(askAjax) {
        $.ajax({
            type: 'POST',
            url: "SaveDraft.aspx",
            data: {
                name: $('#frmTaxSheet').serialize()
            },
            cache: false,
            error: function(xhr, status, errorThrown) {
                alert(errorThrown + '\n' + status + '\n' + xhr.statusText);
            },
            success: function(response) {
                window.setTimeout(saveDraft, 5000);
                $('#notify').text("Form Data Saved").fadeIn(2000, function() {
                    $('#notify').delay('1000').fadeOut(500);
                });
            }
        });
    } else {
        window.setTimeout(saveDraft, 5000);
    }
}

答案 1 :(得分:1)

尝试修改此部分:

success: function(response) {
            $('#notify').text("Form Data Saved")
                        .css('opacity', '0.5')
                        .animate({'opacity':'1'}, 'slow')
                        .animate({'opacity':'0'}, 'slow');
            });

因为在:

$('#notify').text("Form Data Saved").fadeOut(2000, function() { 
                $(this).remove();

您已删除了身份#notify,而第二个interval request已删除身体

答案 2 :(得分:1)

绑定到按键事件怎么样?

$(document).ready(function () {
   $("form").on('keypress', function() {
     window.setTimeout(function(){
       saveData();
      }, 5000);
   });
});

答案 3 :(得分:1)

我担心你的代码有一些很大的错误,你应该尝试这样的事情:)

注意:如果您使用:input而不是:text,请确保您没有任何会导致代码中断的隐藏字段。

note2:检查val()!=“”是否会使ajax发布,即使自上一篇文章以来没有任何变化,因此检测onkeypress on:text可能是更好的解决方案。

注意3:如前面的回答中稍微讨论的那样,如果ajax +动画花费的时间超过5秒,则可能会出现问题,因此更好的方法可能是使用setTimeout而不是setIntervall,并在ajax和动画完成时设置新的超时

$(function()
{
  window.setInterval(function()
  {
    if($(":text").filter(function(index) { return $(this).val().trim() != ""; }).length > 0)
    {                     
       saveData();
    }
  }, 5000);
});