0

我正在使用以下脚本来检查表单内容是否已更改,以防止用户在不保存更改的情况下浏览。

<script type="text/javascript">
var isDirty = false;
var msg = 'You have unsaved changes.';
$(document).ready(function(){
    $(':input').change(function(){
        if(!isDirty){
            isDirty = true;
        }
    });
    window.onbeforeunload = function(){
        if(isDirty){
            return msg;
        }
    };
});
</script>

保存按钮当前如下所示:

<input type="submit" name="frmProjectAction" value="Save" onclick='selectAll(frmProjectResources,true);' />

这在大多数情况下都有效,但我有两个问题:

1. 即使用户单击表单上的“保存”按钮,它也会触发。我怎样才能防止这种情况?

2. 它没有检测到我表单上的 TinyMCE 文本框的变化。如何检测 TinyMCE 文本框以及表单上所有其他字段中的更改?

在此先感谢 - 戴夫

4

3 回答 3

1

1:在将 isDirty 设置为 false 的保存按钮上使用 click() jquery 函数。您需要先向保存按钮添加一个 id 或一个类,以便您可以使用 jquery 定位它。假设您将保存按钮 ID 设置为“保存按钮”,然后执行以下操作:

$('#savebutton').click(function(){
  selectAll(frmProjectResources,true); // <-- from your onclick="" attribute
  isDirty = false;
})

您会注意到我们已将 selectAll(...) 部分从保存按钮的 onclick 属性移动到 jquery。因此,您应该从按钮中删除 onclick 属性。

2:TinyMCE 有onchange_callback,您可以使用它触发一个将 isDirty 设置为 true 的函数。onchange_callback 是在初始化 TinyMCE 时设置的,并在表单更改时为其指定要触发的函数的名称。

//first define the function

function setIsDirty(){
  isDirty = true;
}

// then init the tinyMCE
tinyMCE.init({
        ... // some parameters
        onchange_callback : "setIsDirty"
});

这样,您可以精确控制更改编辑器时发生的情况。如果只需要在离开页面前检查是否被编辑过,也可以使用 TinyMCE 自带的isDirty方法

于 2013-03-04T19:34:12.467 回答
0

这实际上只是问题 1 的解决方案:

您将需要一个额外的事件处理程序,即表单上的 onsubmit 事件处理程序。

在该事件处理程序中,您将 isDirty 更新为 false (因为您现在正在保存表单......所以它不再“脏”)

我无法对 tinyMCE 发表评论,因为我从未使用过它。

于 2013-03-04T19:30:04.903 回答
0
plugins: "autosave"
autosave_ask_before_unload: true
toolbar: "restoredraft"
于 2018-11-13T16:07:50.287 回答