javascript - iOS sessionStorage 和表单提交

标签 javascript jquery ios ajax forms

我的脑袋快要爆炸了。我无法让它按照我想要的方式工作,而且我似乎无法找出它有什么问题。

我有一个需要使用 AJAX 处理的表单。
但在此之前,我想将其保存在 window.sessionStorage 中。

该功能必须跨设备运行,而我在 iOS 上遇到了问题。

有很多关于 stackoverflow 和谷歌的问题,有各种修复。但它们似乎都不适合我。

我有这个表格:

<form role="form" id="searchForm" data-method="search" action="" onsubmit="return doStuff('search')" data-ajax="false">
    <div class="form-group">
        <input type="search" id="search" name="s" class="form-control" placeholder="Search...">
        <span class="help-block"><small>Search by partnumber, suppler or free text</small></span>
    </div>
    <button type="submit" data-ajax="false" class="btn btn-block btn-warning">Search</button>
</form>

现在,当提交表单时,它会运行一个大约 200 行的函数,我已将其缩小到代码中断的地方。
就在这里:

sessionStorage.last = search;
return false;

我 已经从 localStorage 转到 sessionStorage 希望这可能会解决问题,但它没有

我已经尝试使用“正确”的方式使用此sessionStorage.setItem('last', 'search')
设置变量 但无济于事。

无论我做什么,表单仍在提交。 如果我在 sessionStorage 之前 return false; 它工作正常,并停止表单。

它在台式机和安卓上运行良好,但在 iOS 设备上就失败了

我试过的调试:

console.log(sessionStorage.last) returns null
console.log(typeof sessionStorage) returns object
console.log(sessionStorage.last = 'foo') returns foo

如果您需要更多代码/需要我尝试任何东西,请告诉我!

最佳答案

根据 Apple 的文档,它应该可以工作: https://developer.apple.com/library/safari/documentation/iPhone/Conceptual/SafariJSDatabaseGuide/Name-ValueStorage/Name-ValueStorage.html

我使用 localStorage 没有任何问题,但没有使用 sessionStorage(尽管文档说它应该可以互换)。你可以尝试一个 try-catch block ,这样代码就不会崩溃,你可以得到一些线索。 Apple 提到它可能会抛出 QUOTA_EXCEEDED_ERR 异常。

try {
    sessionStorage.setItem("last", search);
} catch (e) {
    alert("error: " + e);
}

关于javascript - iOS sessionStorage 和表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26959373/

相关文章:

javascript - 保留悬停在链接上的效果

ios - 尽管有背景音频功能和 session 类别,背景音频仍停止

javascript - 未调用 Cordova/phonegap JS 回调

javascript - 如何获取用户的地理位置(城市名称,而不是坐标)并将其发送到文本框

javascript - 使用数组中的值作为键在 JavaScript 哈希中设置默认值

javascript - 获取字符串中的特定键值

jquery - .animate() 高度显示 firefox 中的隐藏元素

javascript - 我不想在文本框中输入格式为 :123-12-1234 or 123456789 的 9 位数字

ios - 当应用程序不在Appstore中时,Firebase动态链接无法在开发应用程序中打开

ios - Mapkit 上的动画标记