2012-04-17 5 views
2

я в настоящее время имеют следующую таблицу:Выделите строку таблицы, если ячейка дублировать

Checkbox (ID) | Training Course Code | Training Course Name | .... 
    [ ]   | DE00155115-1   | H&S Exec 1   | .... 
    [ ]   | DE00155115-1   | H&S Exec 1   | .... 
    [ ]   | DE00074454-2   | H&S Exec 2   | .... 

Каждый курс работает более чем один раз, но может быть выбран только один раз, следовательно, на несколько идентификаторов на курс кода.

Что я хочу сделать, так это возможность отключить/выделить повторяющиеся строки после того, как они были выбраны.

В приведенном выше примере, если выбрана первая строка, вторая будет отключена и наоборот. Если выбрана третья строка, ничего не произойдет.

Я попытался выполнить несколько функций, используя jQuery, но не совсем уверен, с чего начать и строить.

+0

Имея более чем один идентификатор с тем же именем, является недействительной HTML, я предлагаю вам использовать классы вместо – elclanrs

ответ

1

Вот длинный и слегка задействованный вариант:

$('table') 
    .on('click','input:checkbox', 
     function(){ 
      var that = $(this), 
       thatRow = that.closest('tr'), 
       id = that.parent().next('td').text(); 

      if (that.is(':checked')){ 
       that 
        .closest('tbody') 
        .find('tr td:nth-child(2)') 
        .each(
         function(){ 
          if ($(this).text() == id){ 
           $(this) 
            .closest('tr') 
            .not(thatRow) 
            .addClass('disabled') 
            .find('input:checkbox') 
            .prop('disabled',true); 
          } 
         }); 
      } 
      else { 
       that 
        .closest('tbody') 
        .find('tr td:nth-child(2)') 
        .each(
         function(){ 
          if ($(this).text() == id){ 
           $(this) 
            .closest('tr') 
            .not(thatRow) 
            .removeClass('disabled') 
            .find('input:checkbox') 
            .prop('disabled',false); 
          } 
         }); 
      } 
     });​ 

JS Fiddle demo.

Ссылки:

+0

Очень подробный пример со ссылками спасибо! Для справок в будущем можно ли отключить строки по 2 таблицам на одной странице? Например, если даты курса были разбиты на месячные блоки, вы могли бы отключить строку во всех отдельных таблицах? – lethalMango

+0

Абсолютно вам нужно всего лишь выбрать способ выбора обеих (или всех) таблиц. –

+0

Звучит неплохо, спасибо. У вас есть пример или какие-либо указатели, где начать чтение? Еще раз спасибо :) – lethalMango

0

при создании таблицы, добавьте atribute в HTML клетки как

<td data-course-name="math">math</td> 

при использовании JQuery попробовать

$('td[data-course-name=' + name of the course + ']').css(apply css here) 

Это просто

+0

К сожалению, для этого потребуется использовать HTML5, так что если кто-то приходит на эту страницу с IE 8/7/6, это не сработает. – Lazerblade

1

Если я правильно понял, то все, что вам нужно для реализации обработчика кликов для флажка, как показано ниже,

DEMO

$('#courses > tbody > tr > td > .selectCourse').on('click', function() { 
    var $tr = $(this).closest('tr') 
    var selCourseCode = $tr.find('td:eq(1)').html(); 
    var isChecked = this.checked; 
    if (isChecked) { 
     $tr.addClass('highlight'); 
    } else { 
     $tr.removeClass('highlight'); 
    } 

    $.each ($tr.siblings(), function() { 
     var courseCode = $(this).find('td:eq(1)').html(); 
     if (courseCode == selCourseCode) { 
      if (isChecked) { 
       $(this).find('.selectCourse').prop('disabled', true); 
       $(this).addClass('disable'); 
      } else { 
       $(this).find('.selectCourse').removeProp('disabled'); 
       $(this).removeClass('disable'); 
      } 
     } 
    }); 
}); 

CSS:

.highlight { background-color: #386C98; } 
.disable { background-color: #386C98; color: grey; } 
+0

Казалось бы, вы избили меня, но не много. Очень похожий подход. – Lazerblade

+0

Очень полезно смотреть на разные подходы, спасибо :) – lethalMango

Смежные вопросы