Javascript 在重定向到单击的链接之前询问用户确认

Javascript 在重定向到单击的链接之前询问用户确认,javascript,jquery,Javascript,Jquery,我有一个很长的向导表单,就像我网站上的调查一样。我想编写一个jQuery函数,这样当用户意外单击页面上的任何链接(向导的“预览”和“下一步”按钮除外)时,会首先询问:是否确实要继续?然后它被重定向到他单击的链接,如果他单击取消,则不会发生任何事情 到目前为止,我所做的是对页面的每个链接(next&previw除外)添加了一个class link\u ridirect,这样我就可以抓取所有锚链接。停止重定向 jQuery函数如下所示 <script type="text/javascript

我有一个很长的向导表单,就像我网站上的调查一样。我想编写一个jQuery函数,这样当用户意外单击页面上的任何链接(向导的“预览”和“下一步”按钮除外)时,会首先询问:是否确实要继续?然后它被重定向到他单击的链接,如果他单击取消,则不会发生任何事情

到目前为止,我所做的是对页面的每个链接(next&previw除外)添加了一个class link\u ridirect,这样我就可以抓取所有锚链接。停止重定向

jQuery函数如下所示

<script type="text/javascript">
<!-- HERE IS THE SEARCH FILTER -->
 //<![CDATA[
    var GLOBAL_NAMESPACE = {};
    $(document).ready(function(){
      GLOBAL_NAMESPACE.value_changed = true;
    });

    $(document).ready(function () {
      $('.link_redirect').bind('click',function (e) {
          e.preventDefault();
          if (GLOBAL_NAMESPACE.value_changed){
              var res = confirm('you have unsaved changes. Do you want to continue?');
              if(res){
                  window.location.href = $(this).attr('href');
              }else{
                  console.log('stay on same page...');
              }
          }
      });
    });
//]]>
</script>
所以我想做的是如何声明一个全局变量来跟踪所有字段的状态。因此,如果某个字段发生更改,请将其设置为true并调用prevent函数

这样做怎么样:

 $('a').click(function(){return confirm("are you sure?");});
将其放置在html的底部,或页面的onload中,或在OP中建议的文档ready中

编辑 如果您只想在变量changesDetected为true时执行此操作,请按如下方式执行:

 $('a').click(function(){return !changesDetected || confirm("are you sure?");});
这样做怎么样:

 $('a').click(function(){return confirm("are you sure?");});
将其放置在html的底部,或页面的onload中,或在OP中建议的文档ready中

编辑 如果您只想在变量changesDetected为true时执行此操作,请按如下方式执行:

 $('a').click(function(){return !changesDetected || confirm("are you sure?");});
您需要使用beforeunload事件。此事件在您从页面退出时处理

$(this).on("beforeunload", function () {
                return 'are you sure';
            });
如果需要,该事件将调用NotForPreview按钮和next,您可以解除绑定此事件处理程序

    $('#myPreviewButtonId').click(function()
{
          console.log('preview clicked');
          $(this).unbind("beforeunload");
});
您需要使用beforeunload事件。此事件在您从页面退出时处理

$(this).on("beforeunload", function () {
                return 'are you sure';
            });
如果需要,该事件将调用NotForPreview按钮和next,您可以解除绑定此事件处理程序

    $('#myPreviewButtonId').click(function()
{
          console.log('preview clicked');
          $(this).unbind("beforeunload");
});

看起来您已经有了中断默认A标记单击的代码,所以关键是检测字段是否已更改,以便在导航离开之前询问是否要保存

下面是一个JSFIDLE:

它向所有可编辑字段添加一个onchange事件,如果某些内容发生更改,它会将全局状态设置为true

如果用户输入一个字段,然后退出而不进行更改,则不会检测到任何更改

function setup() {
  // bind the change event to all editable fields. Runs on load(or doc ready)
  $("input,select").bind("change",function(e) {
      GLOBAL_NAMESPACE.value_changed = true;
  });  
};

看起来您已经有了中断默认A标记单击的代码,所以关键是检测字段是否已更改,以便在导航离开之前询问是否要保存

下面是一个JSFIDLE:

它向所有可编辑字段添加一个onchange事件,如果某些内容发生更改,它会将全局状态设置为true

如果用户输入一个字段,然后退出而不进行更改,则不会检测到任何更改

function setup() {
  // bind the change event to all editable fields. Runs on load(or doc ready)
  $("input,select").bind("change",function(e) {
      GLOBAL_NAMESPACE.value_changed = true;
  });  
};
功能${ $.fn.checkFileType=函数选项{ var默认值={ 允许的扩展:[], 成功:函数{}, 错误:函数{} }; 选项=$.extenddefaults,选项; 返回this.eachfunction{ $this.on'change',函数{ var值=$this.val, file=value.toLowerCase, 扩展名=file.substringfile.lastIndexOf'.+1; 如果$.inarayExtension,则options.allowedExtensions==-1{ 选项。错误; $this.focus; }否则{ 选择。成功; } }; }; }; }jQuery; $function{ $'image'。检查文件类型{ 允许的扩展:['jpg','jpeg'], 成功:功能{ 警惕“成功”; }, 错误:函数{ 警告“错误”; } }; }; 标签{ 显示:块; 字体大小:粗体; 边缘底部:0.5em; } 仅上传图像JPEG 功能${ $.fn.checkFileType=函数选项{ var默认值={ 允许的扩展:[], 成功:函数{}, 错误:函数{} }; 选项=$.extenddefaults,选项; 返回this.eachfunction{ $this.on'change',函数{ var值=$this.val, file=value.toLowerCase, 扩展名=file.substringfile.lastIndexOf'.+1; 如果$.inarayExtension,则options.allowedExtensions==-1{ 选项。错误; $this.focus; }否则{ 选择。成功; } }; }; }; }jQuery; $function{ $'image'。检查文件类型{ 允许的扩展:['jpg','jpeg'], 成功:功能{ 警惕“成功”; }, 错误:函数{ 警告“错误”; } }; }; 标签{ 显示:块; 字体大小:粗体; 边缘底部:0.5em; } 仅上传图像JPEG
如果确认函数的结果为false,则必须阻止对的默认操作

$(document).ready(function () {
$(".deleteJob").on("click", function (e) {
    if (!confirm("Are you Sure want to delete!")) {
        e.preventDefault();
    }
});

})

如果确认函数的结果为false,则必须阻止对的默认操作

$(document).ready(function () {
$(".deleteJob").on("click", function (e) {
    if (!confirm("Are you Sure want to delete!")) {
        e.preventDefault();
    }
});

})

所有链接都像锚一样吗?@nl-x是的!或
我最不感兴趣的是防止自动重定向的链接。所有链接都像锚一样吗?@nl-x是的!或者至少是我感兴趣的那些可以防止自动重定向的功能。是的,我写的功能非常完美。但是我想知道,如果表单中有任何更改,是否可以使用一个变量来检查表单的所有字段。如果有,那么停止用户重定向是的,我写的函数工作得很完美。但是我想知道,如果表单中有任何更改,是否可以使用一个变量来检查表单的所有字段。如果出现以下情况,则使用“离开此页面”、“停留在此页面”按钮,在卸载显示的standart浏览器对话框之前停止用户重定向。因此,当我返回字符串时,该字符串将出现在该消息对话框中。在卸载之前,显示带有“离开此页面”、“停留在此页面”按钮的standart浏览器对话框。所以,当我返回字符串时,这个字符串将出现在这个消息对话框中;thanx,这正是我想要的;