jQuery-防止提交未保存的表单

| 我有一个客户表,每行都有一个方法,该方法会弹出一个内联窗体,显示客户详细信息。此页面上还提供搜索,一些选项卡以及一些href链接和功能。 我正在尝试做的是防止用户将表格保留为未保存状态。所以我在表单输入更改或粘贴时将变量formChanged设置为TRUE。如果formChanged == true,那么我不希望用户单击链接或执行搜索,直到他们确认是否保存数据为止。 我正在使用以下内容来提示用户:
    $(document).click(function(eve) {
    if (!$(eve.target).is(\'#form *\')) {
       if (formChanged) { 
           if (confirm(\"Do you want to save the data or continue to edit?\")) {
                   $(\'#form\').submit();
                   return true;
               }
           else { return false; } //here I do not want to submit the form OR continue with the openForm() method;
       }
    }
});
html标记(简化)如下所示:
<a href=\"/new\">New Customer</a>
<a href=\"javascript:performSearch();\">Search</a>
<table>
    <tr>
      <td onclick=\"openForm(1);\">Customer One</td>
    </tr>
    <tr>
      <td onclick=\"openForm(2);\">Customer Two</td>
    </tr>
    <tr>
        <td><form> //form gubbins loaded via ajax in here </form></td>
     <tr>
      <td onclick=\"openForm(2);\">Customer Two</td>
    </tr>
</table>
我遇到的问题是我可以捕获确认逻辑,但是其他函数(如openForm和performSearch())仍然可以继续执行。 理想情况下,如果用户选择“保存”,我只希望运行功能/跟随URL,如果用户按“取消”,则什么也不做。 显而易见的解决方案是将这种逻辑放入openForm和performSearch函数中,但这是一个过于简化的示例,因为实际页面具有许多不同的功能,这些功能在许多页面上共享,因此这实际上是不可能的     
已邀请:
您可能想要这样的内容:Javascript-离开页面时进行确认 检查代码ѭ3the而不是代码最后部分中的
if(disabledConfirm_exit) return;
。 在jQuery中-您可以使用以下代码:http://api.jquery.com/unload/     
更新资料 我不知道您是否可以使用更好的模式或某些现有方法,但是直到有人发布更好的答案之前,这就是我的能力。您可以编写一个委托方法,该方法将在各处调用,并作为参数,将被赋予要调用的函数以及该函数的参数。它可以检查表单是否已更改-如果未更改,它将调用适当的函数,否则将提示用户。像这样:
<a href=\"/new\">New Customer</a>
<a href=\"javascript:check(performSearch);\">Search</a>
<table>
    <tr>
      <td onclick=\"check(openForm,1);\">Customer One</td>
    </tr>
    <tr>
      <td onclick=\"check(openForm, 2);\">Customer Two</td>
    </tr>
    <tr>
        <td><form> //form gubbins loaded via ajax in here </form></td>
     <tr>
      <td onclick=\"check(openForm, 2);\">Customer Two</td>
    </tr>
</table>
check
函数可能看起来像这样(以目前的形式,它确实很简单,并且仅对要调用的函数使用一个参数,但可以使其更通用):
function check(func, param){
    if (!formChanged){
        func(param); //invoke the original function 
    }
    else{
      //handle the case for a modified form that the user wants to leave
    }
}
如果您通过JavaScript附加了事件处理程序,而不是在HTML中指定事件处理程序,那么您可能会采取更加简洁的方式-将标记与行为分开的不干扰JavaScript的宗旨 听起来您正在寻找
window.onbeforeunload
    

要回复问题请先登录注册