SHAREPOINT Запретить всплывающее окно при нажатии кнопки Отправить - PullRequest
0 голосов
/ 29 декабря 2018

SharePoint 4
SharePoint Designer 2013
Использование DFFS в Custom JS для добавления кода

В настоящее время я использую

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

Это дает мне «Изменения»Вы сделали не может быть спасен. "всплывающее окно всякий раз, когда я пытаюсь отойти от страницы, которая мне нужна.У меня есть 2 проблемы, и все ресурсы, которые я нашел, не совсем их решают.

  1. Это всплывающее окно появляется, когда я нажимаю, чтобы сохранить мою форму
  2. ЕслиЯ нажимаю кнопку «Отмена», чтобы открыть это конкретное всплывающее окно, кнопка «Отправить» остается серой и недоступной для нажатия

Исправление первой проблемы должно избавить от второй, но я не могу найти решение, которое работает,Самое близкое, что я нашел, это Чтобы остановить предупреждение при отправке формы, я использовал $ ("# submit_button"). Click (function () {window.onbeforeunload = null;}); , но это изстарая ветка и не работает.

* edit
Мне пришло в голову, что этот кусок кода, который я использовал для изменения текста для той же кнопки, для которой всплывающее окно не требуется, может быть полезнымкому-то более опытному в кодировании, чем я

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

, но он все еще показываетвсплывающее окно и сохраняет форму, даже когда я нажимаю «остаться на этой странице».Из кода для изменения текста кнопки я знаю, что значение = «Сохранить» изначально до того, как его изменили на «Отправить», так что должен быть зарегистрирован правильный элемент, но код выполняется независимо.Я попытался перевернуть if внутри и снаружи eventlistener! = Vs! ==, var input = document.getElementsByTagName ("input");и input.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 голосов
/ 18 января 2019

Наконец-то понял, и это оказалось проще, чем ожидалось, мне нужна была строка

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;
};
0 голосов
/ 03 января 2019

Я сделал это, добавив веб-часть к форме и включив в нее то, что вы изменили, но слегка изменив ее:

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

Это позволит получить значение последней нажатой кнопки.Если это была кнопка «Сохранить», она сохранит форму, в противном случае она сработает, как мне кажется, и выдаст предупреждение.Если это не желаемый результат, пожалуйста, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...