19

我有一个带有多个标签的订阅表格。您可以在此表单中向后和向前单击。

对于下拉菜单,我使用 jquery 来预先选择先前的选择,因此人们不必在向后单击时重新回答这个特定问题。

该脚本适用于 Chrome 和 Firefox,但对于 Safari 则根本不起作用。不知何故,我就是无法让它工作。

你能看看它并告诉我我做错了什么吗?

剧本:

if (repeat_visit !== '') {
    $('#repeatVisit').find('option').each(function(){
        if ($(this).val() === repeat_visit) {
            $(this).attr('selected','selected');
        }
    });
}

该属性设置为选项,因此它看起来像:是

我可以看到确实发生了这种情况,但是在页面加载后添加 selected 属性时,Safari 似乎不会更改页面。所以我需要以某种方式触发这个更改事件。

4

3 回答 3

48

我找到了答案!

您可以使用 .prop('selected', true) 代替 attr('selected','selected');

于 2013-09-26T10:08:26.680 回答
2

在撰写本文时,以下功能适用于当前的 Safari、Safari Mobile、Chrome、Edge 和 Firefox。

这处理了 .prop 调用必须在 .attr 调用之前完成或整个事情被忽略的问题,以及 Firefox 中的重绘问题。

    function updateSelect(selectname, value){
        $('select[name="'+selectname+'"] option').prop('selected',false);
        $('select[name="'+selectname+'"] option').removeAttr('selected');
        $('select[name="'+selectname+'"] option[value="'+value+'"]').prop('selected',true);
        $('select[name="'+selectname+'"] option[value="'+value+'"]').attr('selected','selected');
        $('select[name="'+selectname+'"]').val(value).change();
    }
于 2021-04-28T00:07:40.357 回答
0

我只是使用函数更改 DOM 元素,.prepend()以将选定的选项添加到 select 中的第一个元素。

selectElement.children[i].setAttribute("selected", true);
selectElement.prepend(selectElement.children[i]);
于 2020-05-22T13:09:50.257 回答