jquery - 设置隐藏的下拉选择值会导致页面在 iOS 11 safari 中重新加载

标签 jquery ios safari html-select ios11

这是我的场景。我正在使用 Bootstrap 下拉菜单来创建一个精美的选择菜单。实际<select> ,用于验证和表单发布目的,将其可见性设置为隐藏。有相应的脚本来设置 <select> 的选定值当引导下拉菜单 <a>链接被点击。

这是我的代码片段。

<div class="dropdown dropdown-select">
    <button class="btn btn-default dropdown-toggle" id="cardSelector" type="button" 
        data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
        <span class="selected-value">- Select Credit Card -</span>
        <span class="fa fa-angle-down"></span>
    </button>
    <ul class="dropdown-menu" aria-labelledby="cardSelector">
        <li data-bind="visible: model.HasValidCardOnFile()"><a href="#" data-value="1">- Existing Credit Card -</a></li>
        <li><a href="#" data-value="0">- New Credit Card -</a></li>
    </ul>
    @Html.DropDownListFor(m => m.CardTypeId, Model.GetCardTypeSelectList(),
        new { data_bind = "value: modelInput.CardTypeId", @class = "requires-validation" })
</div>
@Html.ValidationMessageFor(m => m.CardTypeId)

$(".dropdown-select").on('click', '.dropdown-menu a', function () {
    var $this = $(this);
    var $dropdownCtrl = $this.closest(".dropdown-select");
    $dropdownCtrl.find("select").val($this.data("value")).trigger("change");
    $dropdownCtrl.find(".selected-value").html($this.html());
    $dropdownCtrl.removeClass("open");
    return false;
});

问题是在 iOS 11 safari 中,页面爆炸并出现类似“发生意外问题。页面已重新加载”之类的错误。

我已将其追溯到这段代码 $dropdownCtrl.find("select").val($this.data("value")) .设置值是导致问题的原因,我将其更改为普通 javascript,但仍然出现错误。

在测试中我做了 <select>可见,问题就消失了。因此,更改 <select> 的选定值似乎是一个问题当它不可见时。我尝试添加脚本以在设置所选值之前暂时使其可见,但这并没有解决问题,更改可见性和在 setTimeout 中选择新值也没有解决。

最佳答案

在多次尝试解决该问题后,我发现了一种适用于所有浏览器的解决方法,不会破坏我的 jquery 验证或表单提交。

我的解决方案是清除 <select>列出并使用 javascript 在项目单击时重新添加所选选项。

html部分没有改动,脚本改成了这样

$(".dropdown-select").on('click', '.dropdown-menu a', function () {
    var $this = $(this);
    var $dropdownCtrl = $this.closest(".dropdown-select");
    var $selectCtrl = $dropdownCtrl.find("select");
    $selectCtrl.empty();
    var $selectedOption = $("<option value='" + $this.data("value") + "' selected='selected'>" + $this.text() + "</option>");
    $selectCtrl.append($selectedOption);
    $selectCtrl.trigger("change");
    $dropdownCtrl.find(".selected-value").html($this.html());
    $dropdownCtrl.removeClass("open");
    return false;
});

我进行了大量搜索,但没有找到任何可行的解决方案,所以我将其发布以防它对其他人有所帮助。

关于jquery - 设置隐藏的下拉选择值会导致页面在 iOS 11 safari 中重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52449821/

相关文章:

jQuery 选择类但不选择某些数据属性

jquery - 将 jquery 效果应用于父 li 但不应用于子 li 元素

javascript - 滚动顶部重叠div

ios - iTunes API - 如何判断 Apple Music 上是否有歌曲?

javascript - 使用 Firebase 单击多个对话时无法禁用监听器

ios - documents目录下的Core Data sqlite数据库是iCloud自动备份的吗?

android - ionic 闪屏未加载

JavaScript/AppleScript : Get current time of html video

css - 问题 CSS3 缩放转换和溢出 :hidden on Safari

javascript - JQuery 引用错误(Safari 特定)