【问题标题】:SHAREPOINT Prevent pop-up when clicking SubmitSHAREPOINT 防止点击提交时弹出
【发布时间】:2019-05-26 15:58:51
【问题描述】:

SharePoint 4
SharePoint 设计器 2013
在Custom 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 = "";
    })
}

但即使我单击“停留在此页面上”,它仍会显示弹出窗口并保存表单。从更改按钮文本的代码中,我知道 value =“Save”最初是在更改为“Submit”之前,因此应该注册正确的元素,但无论如何代码都会运行。我尝试在事件监听器内部和外部翻转 if != vs !==, var inputs = 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
与朋友讨论了 on action 的想法并尝试了这个

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

当然还是不行。

【问题讨论】:

  • 那么您到底在寻找什么?自定义“您所做的更改可能无法保存”弹出窗口的方法?这是在编辑页面上吗?一份清单?
  • 我想要修改代码以在单击特定按钮(保存/提交)时根本不显示弹出窗口。旧线程中的代码似乎确实做到了这一点,为该特定操作创建了一个异常,但无论出于何种原因,它不再起作用,我无法找到有关其逻辑的更多信息。这是在列表中的表单上,用于创建和编辑视图。

标签: javascript sharepoint sharepoint-2013 sharepoint-designer


【解决方案1】:

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

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

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

【讨论】:

  • 我用你的代码和我的原始代码做了一些更多的测试。单击“保存/提交”按钮时,仍会出现弹出窗口。我发现的另一件事是,即使出现弹出窗口并且我单击留在页面上,表单仍然会保存。代码作为Web部件添加还是插入DFFS的JS部分也没有区别。
  • 我想发生的是,如果单击“保存/提交”按钮,表单会保存并导航离开,而不会弹出任何窗口
【解决方案2】:

终于弄明白了,比想象的要简单,我需要的行是

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

【讨论】:

    猜你喜欢
    • 2017-01-07
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多