SHAREPOINT 防止点击提交时弹出

SHAREPOINT Prevent pop-up when clicking Submit

SharePoint 4
SharePoint 设计器 2013
在Custom JS下使用DFFS添加代码

我目前使用的是

window.addEventListener('beforeunload', function (e) {
  e.preventDefault();
  e.returnValue = '';
});

每当我尝试离开我需要的页面时,这都会给我一个 "Changes you made may not be saved." 弹出窗口。不过,我有 2 个问题,而且我找到的所有资源都没有完全解决它们。

  1. 当我点击保存我的表单时出现这个弹出窗口
  2. 如果我单击取消此 ↑ 特定弹出窗口,提交按钮将保持灰色且不可单击

解决第一个问题应该可以解决第二个问题,但我找不到有效的解决方案。我找到的最接近的是 To stop the alert on form submission, I used $("#submit_button").click(function() { window.onbeforeunload = null; });,但它来自较旧的线程并且不起作用。

*编辑
我突然想到,我用来更改我不希望弹出窗口的同一按钮的文本的代码块可能对比我更精通编码的人有用

<script type="text/javascript">
_spBodyOnLoadFunctionNames.push("ChangeSPSavetoSubmit()");
function ChangeSPSavetoSubmit()
{
var inputs = document.getElementsByTagName("input");
for(i = 0; i<inputs.length; i++)
 {
    if(inputs[i].type == "button" && inputs[i].value == "Save")
     {
      inputs[i].value = "Submit";
     }
  }
 }
</script>

*edit2
基于我试过的其他代码

if(document.activeElement.value !== "Save" || document.activeElement.value !== "Submit"){
    window.addEventListener('beforeunload', function (e) {
        e.preventDefault();
        e.returnValue = "";
    })
}

但即使我单击 'stay on this page',它仍然显示弹出窗口并保存表单。从更改按钮文本的代码中,我知道值 = "Save" 最初是在更改为 "Submit" 之前,因此应该注册正确的元素,但无论如何代码都会运行。我试过在事件监听器内部和外部翻转 if != vs !==, var inputs = document.getElementsByTagName("input");和 inputs.value !== "Submit",一切都一样。
我也试过了

var clickedo = false
if(document.activeElement.value == "Save" || document.activeElement.value == "Submit"){
    clickedo = true
}
if(clickedo === false){
    window.addEventListener('beforeunload', function (e) {
        e.preventDefault();
        e.returnValue = "";
    })
}

结果相同。我需要元素以外的东西吗?我可以检测到某个元素何时已被点击吗?

*edit3
与一位朋友讨论了关于行动的想法并尝试了这个

var inputs = document.getElementsByTagName("input");
for(i = 0; i<inputs.length; i++)
 {
    if(inputs[i].type == "button" && inputs[i].value == "Submit")
     {
      inputs[i].addEventListener('click', function (e) {window.onbeforeunload = null});
     }
  }
window.addEventListener('beforeunload', function (e) {
        e.preventDefault();
        e.returnValue = "";
    })

这当然还是不行。

我这样做的方法是在表单中添加一个 webpart 并包含您已有的但稍作修改的内容:

window.addEventListener('beforeunload', function (e) {
    if(document.activeElement.value !== "Save"){
        e.preventDefault();
        e.returnValue = "";
    }
});

这将获取上次按下的按钮的值。如果它是保存按钮,它将保存表单,否则它将按照我认为需要的方式触发并提示警报。如果这不是您想要的结果,请告诉我。

终于想通了,比想象中简单,我需要的是

document.getElementById(subb).addEventListener("click", function() { window.onbeforeunload = null});

使用事件侦听器获取我不想弹出的特定按钮点击。

完整代码;

var inputs = document.getElementsByTagName("input");
var subb;
for(i = 0; i<inputs.length; i++)
 {
    if(inputs[i].type == "button" && inputs[i].value == "Submit")
     {
      subb = inputs[i].id;
     }
  }
document.getElementById(subb).addEventListener("click", function() { window.onbeforeunload = null});
window.onbeforeunload = function() {
    return true;
};