SHAREPOINT单击“提交”时防止弹出窗口

时间:2018-12-28 22:41:41

标签: javascript sharepoint sharepoint-2013 sharepoint-designer

SharePoint 4
SharePoint Designer 2013
在自定义JS下使用DFFS添加代码

我当前正在使用的是

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

这给我一个“您所做的更改可能无法保存的信息。”每当我尝试离开所需页面时,都会弹出。不过,我有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 = "";
    })
}

,但是即使我单击“停留在此页面上”,它仍然显示弹出窗口并保存表单。从更改按钮文本的代码中,我知道值=“ Save”最初是在更改为“ Submit”之前,因此应该注册正确的元素,但是代码无论如何都会运行。我试过翻转事件侦听器内外的if!= vs!==,var输入= document.getElementsByTagName(“ input”);和inputs.value!==“提交”,并且一切都一样。
我也尝试过

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 = "";
    })

那当然还是行不通的。

2 个答案:

答案 0 :(得分:0)

我这样做的方法是在表单中添加一个Web部件,并包含您已经修改的内容:

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

这将获取最后按下的按钮的值。如果是保存按钮,它将保存该表单,否则它将触发我认为想要的并提示警报。如果这不是理想的结果,请告诉我。

答案 1 :(得分:0)

最后弄清楚了,它比预期的要简单,我需要的行是

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;
};