选择的jQuery下拉列表=在Safari中选择不起作用

时间:2013-09-25 11:06:08

标签: jquery html drop-down-menu safari html-select

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

对于下拉菜单,我使用jquery来预选前一个选项,这样人们就不必在向后点击时重新回答这个特定问题。

此脚本适用于Chrome和Firefox,但对于Safari,它根本不起作用。 不知何故,我无法让它发挥作用。

请你看看它,告诉我我做错了什么?

脚本:

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

该属性设置为选项,如下所示:     是

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

3 个答案:

答案 0 :(得分:33)

我找到了答案!

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

答案 1 :(得分:0)

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

selectElement.children[i].setAttribute("selected", true);
selectElement.prepend(selectElement.children[i]);

答案 2 :(得分:0)

截至撰写本文时,以下功能适用于当前的 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();
    }