使用 jQuery 将选项值移动到下拉列表顶部

Moving option value on top of dropdown list using jQuery

我有这个代码:

  function SelectReferralFromQueryString() {
    var queryStringName = GetParameterValues('Referral');

    if (queryStringName != undefined || queryStringName != null) {
         queryStringName = decodeURIComponent(queryStringName);

       var exists = false;
       $('#refDropDown option').each(function () {
           if (this.value == queryStringName) {
               exists = true;
               var option = $(this);
               $(this).remove();
               $('#refDropDown option').prepend(option);
               return false;
           }
       });

       if (exists == true){
           DropDownReferral.value = queryStringName;
           $("#refDropDown").prop("disabled", true);
        }
    }

}

function GetParameterValues(param) {
    var url = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for (var i = 0; i < url.length; i++) {
        var urlparam = url[i].split('=');
        if (urlparam[0] == param) {
            return urlparam[1];
        }
        else
            return false;
    }
}

还有这个HTML:

<select name="refDropDown" id="refDropDown" class="items" data-hidden-field="DropDownReferral">
     <option value="">Please Select</option>
     <option value="Albert">Al</option>
     <option value="Steve T">Steve</option>
</select>

所以,逻辑是:

  1. 如果作为查询字符串的 'Referral' 获得通过,那么我将检查 select 选项中的值并将其移至顶部并禁用下拉列表。 不工作!见下图。

  1. 如果下拉列表没有查询字符串值,则禁用下拉列表并将其存储在隐藏字段中。 (工作中!)

我在这里缺少什么?

如果我通过了 ?Referral=Albert,那么它应该会在顶部显示 'Al'。如果我传递 ?Referral=Steve,则在顶部显示 'Steve' 并禁用下拉菜单。

如果您可以指望引荐是有效值,您可以试试这个(未经测试):

$('#refDropDown').val(queryStringName).prop('disabled', true);

否则首先检查该值是否存在,方法如下:

if($('#refDropDown option[value="' + queryStringName + '"]').length != 0){ 
     //code above here 
}

然后去掉选项上的那个循环,以及将 select 框设置为禁用的 if

另请注意,禁用的 select 框不会在您提交表单时提交值,因此您需要使用推荐参数或隐藏字段。

您可以使用 jQuery 的 val() 函数来 select 选项:

$("#refDropDown").val(queryStringName);