奇怪的jquery表单提交

时间:2012-02-08 11:29:09

标签: jquery forms button submit

有一个div(表单),只需单击一个按钮即可打开。这种形式中有某些控件,如时域,日期,文本框。表单打开时,它预先加载了数据。表格的提交按钮(应用更改)也在那里。

如果我只是点击"应用更改"按钮没有更改窗体中的任何内容,不执行任何操作,但如果我更改了时间,日期或文本,表单将被保存。

我们如何定义这种行为?

对于错误解释的语言感到抱歉......

如果我只是点击"应用更改"我的表单没有保存。按钮。 在jquery中保存表单之前是否需要编辑其中一个控件?

3 个答案:

答案 0 :(得分:1)

您可以处理表单中所有控件的change事件,当控件的值发生更改时,在<form>元素上设置一个标志(例如,使用data()) ,然后只有在设置了这个标志时才允许提交表单:

$("form").on("change", ":input", function() {
    $(this).closest("form").data("someControlHasChanged", true);
}).on("submit", function(e) {
    if (!$(this).data("someControlHasChanged")) {
        e.preventDefault();
    }
});

答案 1 :(得分:1)

以下是跟踪表单数据更改的粗略方法:

function dealWithForm(){
  var hasChanged = false,
      $form = $('form');

  $('input, select', $form).on('change', function(){
    hasChanged = true;
  });

  $('form').submit(function(){
    if(hasChanged){
      $form.submit();
      // or post asynchronously with ajax    
      hasChanged = false;
      $.post( // blah blah );
    } else {
      // stop form from submitting.
      return false;    
    }
  });
}

$(document).ready(function(){
  dealWithForm();
});

答案 2 :(得分:0)

目前尚不清楚是否要自动发布更改,或者如果您希望在点击“应用更改”时发布更改。 (但如果没有做出任何更改,那么应用更改应该什么都不做。

最简单的方法是将旧值声明为javascript变量。为applyChanges添加一个onclick处理程序,将每个旧值与当前表单值进行比较。 如果有变化,请发布。

我能看到的唯一问题是“/”需要转义/未转义。 一个更脏的解决方法/黑客是使用旧值生成不可见的div。

并在那里生成旧字段。然后${oldFIeld1}.text()检索它。 请注意,这可能是一个黑客攻击或许其他人有一个微妙的方法来避免逃避/失败。