5

如果我有这个选择框:

<select id="s" name="s">
<option value="0">-</option>
<option value="1">A</option>
<option value="2" selected>B</option>
<option value="3">C</option>
</select>

如果我尝试运行$("#s").val("4"),则选择更改为“0”。(请参阅此处的行为:http: //jsfiddle.net/4NwN5/)我怎样才能做到这一点,以便如果我尝试将选择框设置为选择框中不存在的值,则没有任何变化?

4

3 回答 3

7

你可以这样试试:

var toSel = 3; // Say your value is this
if($("#s option[value=" + toSel +"]").length > 0) //Check if an option exist with that value
{
    $("#s").val(toSel); //Select the value
}

或者只使用prop()

$("#s option[value='" + toSel +"']").prop('selected', true);

演示

于 2013-06-14T18:00:39.820 回答
1
// grab the selected
var s = $("#s");

// cache the current selectedIndex
var idx = s[0].selectedIndex;

// set the value
s.val("4");

// If it was set to `0`, set it back to the original index
s[0].selectedIndex = s[0].selectedIndex || idx;

您可以将其滚动到插件中:

jQuery.fn.selectVal = function (val) {
    return this.each(function () {
        if (this.nodeName === "SELECT") {
            var idx = this.selectedIndex;

            $(this).val(val);

            var newOpt = this.options[this.selectedIndex];

            if (newOpt.value !== ("" + val))
                this.selectedIndex = idx;
        }
    })
};

$("#s").selectVal(4);
于 2013-06-14T18:07:52.763 回答
0

jsFiddle Demo

在调用 jquery 的 val 之前,您需要使用自定义过滤器

$.fn.valScreen = function(value){
 if( this.is("select") && this.find("option[value="+value+"]").length != 0 )
  this.val(value);//call vanilla val
 return this;//return jQuery object for chaining
};

然后你可以使用它:

$("#s").valScreen("4");
于 2013-06-14T18:45:14.327 回答