2012-06-25 50 views
-1

在检查表单更改的项目上工作。我很难删除用户提交表单时发生的变化。关于提交和jquery的问题

$(document).ready(function(){ 
    changes_made = false; 

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

    $(window).bind('beforeunload', function() { 
     if(changes_made) { return 'You have made changes on this page.'; } 
    }); 

    $('form').each(function() { 
     $(this).on('submit', function() { 
      changes_made = false; 
     }); 
    }); 
}) 
+0

那么你的问题是什么?此外,1)您发布的代码不会尝试“删除”(我认为您的意思是“撤消”)对表单所做的任何更改 - 它似乎试图自行跟踪更改; 2)变化事件不会触发文本输入,只能在您在预设值(选择,复选框等)之间切换的输入上触发; 3)你的beforeunload事件处理程序返回一个值,但没有任何东西会收到这个返回值。大概你打算取消这个活动,然后把这个信息传达给用户。 – Utkanos

+0

忽略textarea问题,我试图通过页面上的每个表单循环,并将变量changes_made设置为false - 另一种方法是在相同的地方删除beforeunload。 – mosi86

+0

无法重现问题..请参阅http://jsfiddle.net/J9nJe/4/,尝试刷新页面并查看您的控制台没有任何反应输入smthing然后刷新,您将看到消息记录在控制台中.. – Baz1nga

回答

0

如果您希望能够恢复用户所做的任何更改,则需要存储表单的原始内容。这样,您可以不用等待更改事件,而只是将旧的表单内容与新内容进行比较,并在必要时进行替换。其他小技巧:在变量声明之前需要一个var(否则变量最终会附加到窗口对象上)。除非您的表单提交是ajax调用,否则将changes_made设置回false是没有意义的。无论如何,该页面将重新加载并且changes_made将再次为假。

+0

尝试提醒用户所做的更改并在离开页面前提示他们进行保存。我正在使用changes_made = false来阻止提示。我也可以使用.off删除它,但无论哪种方式它似乎永远不会触发form.submit() – mosi86

+0

以下不起作用 - 寻找正确的方法来做到这一点 $('form')。each (function(){ $(this).on('submit',function(){ changes_made = false; }); }); – mosi86