Jquery过滤器,如果不匹配,则返回默认值

时间:2013-01-22 10:16:39

标签: jquery filter

http://jsfiddle.net/jeepstone/kxuMC/

if($('#deliveryPostcodeEstimator').length > 0) {
    $('#deliveryPostcodeEstimator')
        .blur(function() {
            $('select[name=country] option').filter(function(index) { 
                if ($(this).text() == $('#deliveryPostcodeEstimator').val().toUpperCase()) {
                    var result = true;
                } else {
                    // return the last item in the dropdown list
                }
                console.log(result);
                return result;
            }).prop('selected', true);
            var thisForm = $(this).closest("form");
            //thisForm.submit();
        })
        .keyup(function() {
            $(this).val($(this).val().toUpperCase());
        })
}

在上面的代码中,用户输入邮政编码的输出代码。如果匹配(onblur),则选择该项目。我不能为我的生活弄清楚如何设置默认为最后一项(英国其他地区)。我可以设置默认的选定项目,但如果没有匹配,我希望它默认返回英国其他地区。

由于

2 个答案:

答案 0 :(得分:2)

为什么不在进行过滤之前将所选选项设置为Rest of UK。然后让过滤(如果适用)覆盖默认选择。

if($('#deliveryPostcodeEstimator').length > 0) {
        $('#deliveryPostcodeEstimator')
            .blur(function() {
                //Set to default
                $('select[name=country] option:last').prop('selected', true);
                $('select[name=country] option').filter(function(index) { 
                    if ($(this).text() == $('#deliveryPostcodeEstimator').val().toUpperCase()) {
                        var result = true;
                    }
                    return result;
                }).prop('selected', true);
                var thisForm = $(this).closest("form");
                //thisForm.submit();
            })
            .keyup(function() {
                $(this).val($(this).val().toUpperCase());
            })
    }

示例:http://jsfiddle.net/kxuMC/1/

答案 1 :(得分:0)

您需要检查过滤器是否匹配任何内容。这样的事情应该做:

if($('#deliveryPostcodeEstimator').length > 0) {
        $('#deliveryPostcodeEstimator')
            .blur(function() {
                var sel = $('select[name=country] option').filter(function(index) { 
                    return ($(this).text() == $('#deliveryPostcodeEstimator').val().toUpperCase())                      
                });
                if (sel.length > 0)
                    sel.prop('selected', true);
                else
                    $('select[name=country] option').last().prop('selected', true);
                var thisForm = $(this).closest("form");
                //thisForm.submit();
            })
            .keyup(function() {
                $(this).val($(this).val().toUpperCase());
            })
    }

JSFiddle