Jquery:根据文本框文本选择下拉选项

时间:2014-06-25 06:53:06

标签: javascript jquery

我尝试根据文本框文本选择选项。

以下是我的HTML

<select id="select1">
    <option value="">-- Please Select --</option>
    <option value="277">12 +$2.99</option>
    <option value="278">25 +$2.75</option>
    <option value="279">50 +$2.50</option>
    <option value="280">100 +$2.00</option>
    <option value="281">250 +$1.90</option>
    <option value="282">500 +$1.70</option>
    <option value="283">1000 +$1.60</option>
    <option value="284">2500 +$1.50</option>
    <option value="285">5000 +$1.20</option>
    <option value="286">10000 +$1.00</option>
    <option value="287">25000 +$0.80</option>
</select>
<input type="text" id="pqr" />

我的js喜欢吼叫

 $(function(){
    $('#pqr').change(function(){
        $txt = $( "#select1 option:contains('"+$(this).val()+"')" ).text();
            $arr = $txt.split(" +");
            $( "#select1").val($txt);
            alert($arr[0])
            $( "#select1" ).filter(function() {
                 alert($( this ).text > $arr[0]);
            })
    });
});

因此,如果用户输入文本12或大于12且低于25我想要选择选项第二12 + $ 2.99并且如果用户输入1500而不是选项1000 + $ 1.60被选中。基本上我尝试在(+)符号之前比较选项文本并尝试基于此选择。

请给我提示或任何好的帮助以解决这个问题

5 个答案:

答案 0 :(得分:3)

遍历每个选项以比较值。你可以使用这样的东西,

$(function () {
    $('#pqr').change(function () {
        var txtvalue = parseFloat($(this).val());
        $("#select1 option").each(function () {
            var splitText = $(this).next().text().split("+");
            if (splitText.length > 1) {
                if (txtvalue < parseFloat(splitText[0].trim())) {
                    $(this).prop("selected", true);
                    return false;
                }
            }
        });
    });
});

Fiddle

答案 1 :(得分:3)

试试这个:

$(function(){
    $('#pqr').change(function(){
       var inputVal = parseInt($(this).val());
        $('#select1 option').each(function(){
           var firstVal = $(this).text().split('+')[0];
           var nextVal = inputVal;
           if(!$(this).is(':last'))
            $(this).next().text().split('+')[0];

            if(parseInt(firstVal) <= inputVal && parseInt(nextVal) >=inputVal)
            {
                $(this).prop('selected',true);
            }
        });
    });
});

<强> Demo

答案 2 :(得分:3)

更改回调函数中的$arr[0]将包含尚未解析为整数的文本值,因此语句alert($( this ).text > $arr[0]);将不会提供所需的输出。 要检查一系列选择列表选项之间的值,您可以使用以下数据属性:

<select id="select1">
    <option value="" data-min="-" data-max="-"> Please Select </option>
    <option value="277" data-min="12" data-max="25">12 +$2.99</option>
    <option value="278" data-min="25" data-max="50">25 +$2.75</option>

这样您就不必将选项文本解析为整数。 可以使用jquery数据函数http://api.jquery.com/data/检索这些数据值。

此外,您始终不会将$('#pqr').val()作为选项文本中的文本,因此您必须收集文本框的值并将其与每个选项的范围进行比较(值&gt; = data-max || value&lt; = data-min)。

答案 3 :(得分:3)

每次更改时,都会迭代所有选项元素并根据parseInt()进行比较:

jQuery(function($) {
    $('#pqr').on('change', function() {
        var value = parseInt(this.value, 10),
        dd = document.getElementById('select1'),
        index = 0;

        $.each(dd.options, function(i) {
            if (parseInt(this.text, 10) <= value) {
                index = i;
            }
        });

        dd.selectedIndex = index; // set selected option
    });
});

Demo

答案 4 :(得分:2)

$(function(){
  $('#pqr').on("input", function(){
    var text = this.value;      
    var options = $("#select1 > option");
        var elementToSelect = options.eq(0);
    if (text.match(/[0-9]+/)) {
      elementToSelect = options.filter(function(){
        return Number(this.innerText.split("+")[0]) <= text;
      })
      .eq(-1);
    }
    elementToSelect.attr("selected",true);
  });   
});