簡體   English   中英

使選擇選項值不區分大小寫/具有多個值

[英]Make select option value case insensitive / have multiple values

我的表單使用查詢字符串中的值獲取預先填充的onload。 在查詢中,當country = Australia時,“Australia”被選中。 但是當country = AUSTRALIA或country = australia時,什么都沒有被選中。

我的選擇字段:

<select id="country" name="country" style="border: 1px solid rgb(204, 204, 204); font-family: Arial,Helvetica,sans-serif; font-size: 9pt; width: 150px;">
    <option value="" selected="selected">Please select country</option>
    <option value="Australia">Australia</option>
    <option value="Austria">Austria</option>
</select>

我猜<option value="Australia, AUSTRALIA, australia">會讓它發揮作用。 我怎么做到這一點? 這個( Select標簽中的選項可以帶有多個值? )是一個選項嗎?

否則,如何使用查詢字符串值使選擇字段不區分大小寫?

JS for querystring添加:

function populate(form) {
    if (location.search == null || location.search.length < 1) return; // no querystring
    var pairs = location.search.substring(1).split("+");
    for (var p = 0; p < pairs.length; ++p) {
        var pair = pairs[p].split("=");
        var name = pair[0];
        var value = unescape(pair[1].replace(/\+/g, " "));
        var fld = form.elements[name];
        var ftype = null;
        var farray = false;
        var atype = Array;
        if (fld != null) {
            if (fld.length != null && fld.length >= 1 && fld[0].type != null && fld[0].type != undefined) {
                ftype = fld[0].type;
                farray = true;
            } else {
                ftype = fld.type;
            }
        }
        switch (ftype) {
        case "text":
        case "hidden":
        case "textarea":
            if (farray) fld = fld[0]; // only handle first-named for this type
            fld.value = value;
            break;
        case "select-one":
        case "select-multiple":
            if (farray) fld = fld[0]; // only handle first-named for this type
            for (var o = 0; o < fld.options.length; ++o) {
                var opt = fld.options[o];
                var oval = opt.value;
                if (oval == null || oval == "") oval = opt.text;
                if (oval == value) {
                    opt.selected = true;
                    break;
                }
            }
            break;
        case "checkbox":
        case "radio":
            if (!farray) {
                // single checbox or radio of that name:
                fld.checked = true;
            } else {
                for (var cr = 0; cr < fld.length; ++cr) {
                    if (fld[cr].value == value) {
                        fld[cr].checked = true;
                        break;
                    }
                }
            }
            break;
        default:
            alert("Unknown field type encountered for field " + name + ": " + ftype);
            break;
        } // end of switch
    } // end of loop on fields from qs
}

當你預先填充時(我猜你在for循環中比較值),用.toLowerCase()比較值。 例如:

if (querystringValue.toLowerCase() === optionValue.toLowerCase()) {
    // Select this option
    break;
}

更新:

對於您更新的代碼,我認為它會在這里:

if (oval == value) {
    opt.selected = true;
    break;
}

所以改成它:

if (oval.toLowerCase() === value.toLowerCase()) {
    opt.selected = true;
    break;
}

根據是否適用,您可能希望對復選框/單選按鈕設置執行相同操作:

if (fld[cr].value == value) {

但那真的取決於你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM