禁用选择选项

时间:2013-06-27 10:17:48

标签: jquery

我使用的jQuery函数禁用了在一个页面上选择相同选择值的可能性。例如:如果我在第2页上有不同的选择,第一次选择的选择值为1,则在第二次选择时,应禁用值1。我找到了评论的jQuery函数,但我不知道它的运行方式。

var previous = -1;
// Setting a previously selected value
$("select").change(function () {
// When any select element is changed
if ($(this).val() > -1) {
// When value is > -1
    // Get all selects but not the current one which triggered the change event
    $("select").not(this)
       .find("option[value=" + $(this).val() + "]").attr('disabled', 'disabled');
    // set the current option value to disabled

     // Get all selects but not the current one which triggered the change event
    $("select").not(this)
        .find("option[value=" + previous + "]").removeAttr('disabled');
    // Remove the disabled property on previous value
} else {
    // Get all selects but not the current one which triggered the change event
    $("select").not(this)
        .find("option[value=" + previous + "]").removeAttr('disabled');
    // Remove the disabled property
}
}).focus(function () {
previous = $(this).val();
// store the current value of the select to previous 
}); 

这是JSFiddle链接: http://jsfiddle.net/Z2yaG/4/

有人可以解释我是var之前的数组吗?函数如何存储var之前所有选择的值?

1 个答案:

答案 0 :(得分:1)

当您专注于任何选择时,previous会获得选择值。当你改变的时候 $(this).val()获取更改后的值,previous表示前一个值(更改前的值)。

所以,基本上你的功能是什么,只要你选择任何选项,就会在其他两个selects中禁用该选项

$("select").not(this) .find("option[value=" + $(this).val() + "]").attr('disabled', 'disabled');

此行表示选择除当前行之外的所有selectdisable option,其值为this.val()

然后它同样启用previous选项,因为不再选择

$("select").not(this) .find("option[value=" + previous + "]").removeAttr('disabled');

选择除selects之外的所有this,然后移除所有disable所选值的options