2013-06-18 3 views
2

Я использую отличную функцию jQuery, которая отключает выбор равных значений параметров, если на странице есть несколько вариантов выбора. Проблема в том, что я не знаю, как это делается.Несколько вариантов, которые отключают параметры друг друга

JSFiddle ссылка: http://jsfiddle.net/Z2yaG/4/

Это то, что функция JQuery выглядит:

var prev = -1; 
$("select").change(function() { 
    if ($(this).val() > -1) { 
      $("select").not(this).find("option[value=" + $(this).val() + "]").attr('disabled', 'disabled'); 
      $("select").not(this).find("option[value=" + previous + "]").removeAttr('disabled');} 
    else { 
      $("select").not(this).find("option[value=" + previous + "]").removeAttr('disabled'); 
     } 
    }).focus(function() { 
previous = $(this).val(); 
}); 

Как это работает ????

+0

В чем вопрос? – lifetimes

+0

Как это работает, я использую это в своей работе, и я должен знать, чтобы объяснить это ... –

+0

Часть с .not (this) .find и использование «previous» ... –

ответ

3
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 
}); 
+0

Итак, если я получу это правильно? Я понимаю, что предыдущая переменная удерживает выбранное значение, чтобы впоследствии его можно было повторно использовать, но это предыдущий массив, или каждый select имеет свой предыдущий var? Я не понимаю, как работает функция с .find ("option [value =" + previous + "]"). RemoveAttr ('disabled') удаляет только предыдущее выбранное значение для этого конкретного выбора. Если предыдущий массив, он удалит отключить все выбранные значения ???? –