javascript - 如果存在查询字符串,则关闭 javascript 函数

标签 javascript

因此,我正在使用一个表单,一旦提交成功,它就会向 URL 添加一个 ?success 查询字符串。

使用下面的代码,每当用户到达 ?success 页面时,它将阻止他们点击后退按钮,这有助于防止提交到数据库 - 问题是,如果我有服务器端错误,它将阻止整个页面上的后退按钮,直到清除缓存。

enter image description here

function disableBack() {
    window.history.forward()
}

window.onload = disableBack();
window.onpageshow = function(evt) {
    if (evt.persisted)
        evt.preventDefault();
    disableBack()
};

如何在仅出现 ?success 查询字符串时触发以下 javascript 代码段?我尝试过以下代码,但没有成功:

if (location.search === "?success") {
    // Prevent the form from being resubmitted on backspace
    function disableBack() {
        window.history.forward()
    }

    window.onload = disableBack();
    window.onpageshow = function(evt) {
        if (evt.persisted)
            evt.preventDefault();
        disableBack()
    };
}

更新的答案(它仍然重定向回来):

function disableBack() {
    window.history.forward()
}

var includesURLSearchString = searchString => location.search.includes(searchString);
var hasQueryString = includesURLSearchString('success');

console.log(hasQueryString);

if (hasQueryString) {

    // Prevent the form from being resubmitted on backspace
    window.onload = disableBack();
    window.onpageshow = function (evt) {
    if (evt.persisted)
        evt.preventDefault();
        disableBack()
    };
}

最佳答案

location.search 有一个字符串作为值。您可以使用 includes 检查字符串是否包含某个单词。方法。考虑下面的函数。

const includesURLSearchString = searchString => location.search.includes(searchString);

您可以使用此函数来检查是否在 location.search 字符串中找到单词(如 search)。因此 ?site=something&success 的值将返回 true

const hasQueryString = includesURLSearchString('success');
if (hasQueryString) {
  disableBack();
}

编辑

URLSearchParams接口(interface)旨在用于此目的。您可以使用此 API 来解构查询字符串,而不是创建自己的检查字符串的函数。随着has方法您可以检查值是否存在。

const searchParams = new URLSearchParams(location.search);
const hasQueryString = searchParams.has('success');
if (hasQueryString) {
  disableBack();
}

如果您尝试禁用浏览器的后退按钮,请尝试以下操作。此函数将以编程方式将 URL 添加到浏览器的历史记录中。每当用户尝试返回时,就会触发 popstate 事件。每当在 JS 中添加的状态历史记录中删除时,就会触发此事件。现在,每当用户返回时,它只需将当前 URL 再次添加到历史记录中即可。所以用户永远无法回去。

Original post with this solution:

function disableBack() {
  history.pushState(null, null, location.href);
  window.addEventListener('popstate', function () {
    history.pushState(null, null, location.href);
  });
}

关于javascript - 如果存在查询字符串,则关闭 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59723774/

相关文章:

javascript - Bootstrap 4 输入分机值

javascript - 异步调用不评估 react 中的条件

javascript - 检查链接是否包含数组javascript中的单词

javascript - 在 JavaScript 中将本地化字符串转换为十进制

javascript - 使用当前日期生成随机 ID

javascript - 如何一次显示段落中的一个新单词,通过按键或鼠标单击移动?

javascript - Node JS 无法读取未定义的属性 'length'

javascript - 如何在 Chrome 中显示一个 div,但使其完全不具有交互性

javascript - Firefox 插件 - `this` 在同一对象的一种方法中有效,但在另一种方法中失败

javascript - 从 bacon.js 流中重构通用组合器