2010-02-23 4 views
1

у меня генерируется таблица, которая содержит несколько строк с каждой строкой, содержащей ведущую td с флажком и другой td с списком выбора =JQuery условного действия, когда срабатывает событие

<div class="table"> 
<table width="100%" class="tframe" id="table0"> 
<thead> 
<tr class="trheadline"> 
    <th>Selection</th> 
    <th>Repository-Tag</th> 
</tr> 
</thead> 
<tbody> 
<tr class="trow"> 
    <td> 
     <input type="checkbox" 
      value="0#298#abk_testn#l#CLEARCASE#at_web_vob" 
      name="module">ModuleA 
    </td> 
    <td> 
    <select name="cvstags"> 
     <option value="no_Repository">no_Repository</option> 
     <option value="220607_143102110">220607_143102110</option> 
     <option value="220607_09410236">220607_09410236</option> 
     <option value="220507_091903814">220507_091903814</option> 
    </select> 
    </td> 
</tr> 
<tr class="trow"> 
    <td> 
     <input type="checkbox" 
      value="1#299#abk_integration#d#CLEARCASE#at_web_vob" 
      name="module">ModuleB 
    </td> 
    <td> 
    <select name="cvstags"> 
     <option value="220607_143102110">220607_143102110</option> 
    </select> 
    </td> 
</tr> 
<tr class="trow"> 
    <td> 
     <input type="checkbox" 
      value="2#301#abk_statcont##CLEARCASE#at_web_vob" 
      name="module">ModuleC 
    </td> 
    <td> 
    <select name="cvstags"> 
     <option value="no_Repository">no_Repository</option> 
     <option value="220607_143102110">220607_143102110</option> 
     <option value="220607_09410236">220607_09410236</option> 
     <option value="220507_091903814">220507_091903814</option> 
    </select> 
     </td> 
    </tr> 
    </tbody> 
</table> 
</div> 

Теперь я хочу, чтобы прикрепить изменение событие на избранных, но я хочу действие только начать, если ведущий флажок установлен, то на данный момент у меня есть =

<script> 
    $('select').change(function(){ 
     alert($(this).val()); 
    }); 
</script> 

, который дает мне значение выбранного параметра, хорошо, но две проблемы остаются =

  1. Как проверить, установлен ли первый флажок в том же tr?

    $('select').change(function(){ 
    if (the leading checkbox is checked) { 
        run my action.. 
    } 
    }); 
    
  2. событие изменения не работает, если список выбора есть только один вариант, как во втором ряду моего примера выше, как для достижения подобного поведения, как и при случае изменений в этом случае?

Спасибо за любые подсказки !!

ответ

1

Как насчет того, чтобы посмотреть на это наоборот, например, обработать событие щелчка на флажке, и если флажок установлен, оцените значение выбора в строке?

$('tr.trow input:checkbox').click(function() { 
    if (this.checked) { 
     var self = $(this); 
     self.parent().parent().find('select').val(); // value of select 
    } 
} 

EDIT:

Вот как я бы грубо обращаться с этим:

// use an object literal to prevent global pollution(!) 
var rowActions = { 
    checkbox: function() { 
     if (this.checked) { 
      rowActions.doSomething(); 
     } 
    }, 
    select: function() { 
     if ($(this).parent().parent().find('input:checkbox:checked').length) { 
      rowActions.doSomething(); 
     } 
    }, 
    doSomething: function() { 
     alert('I did something!'); 
    } 
} 

$('tr.trow').each(function() { 
    var self = $(this); 
    self.find('input:checkbox').click(rowActions.checkbox); 
    self.find('select').change(rowActions.select); 
}); 

и вот Working Demo, чтобы показать его в действии. добавьте/отредактируйте URL-адрес, чтобы играть с кодом.

+0

был моим первым амбициям, но нормальный поток выглядит так: пользователь решает, какие модули он хочет доставить, поэтому он проверяет связанный флажок. После этого он выбирает соответствующий тег, означает, что он выбирает вариант, часто он меняет свое мнение, означает, что флажок остается выбранным, но выбранные параметры изменяются. Каким будет решение, если я поеду туда? – Rebse

+0

.. тем не менее вы могли бы разместить решение по-другому? – Rebse

+0

Ну, если в выборе этой строки есть только один параметр, пользователь не может изменить свое мнение, поэтому мы можем действовать безопасно, когда пользователь проверяет/снимает флажок (обратите внимание: используйте событие click). Мы также можем привязать обработчик события к событию изменения на элементах выбора для запуска того же кода, который будет работать в этом флажке. Итак, извлеките этот код в отдельную функцию и вызовите его из обработчика события в каждом случае. –

0

Только у вас есть секунда, но посмотрите на предыдущий метод: например.

jQuery(this).prev("td").child("input[name=module]").val() != 'undefined' 

... или что-то подобное

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

+0

надеялся, что будет другое решение для одной проблемы выбора похоже, что мне нужно пойти с фиктивной опцией «Выбрать один» или аналогичный – Rebse

+0

один вариант «выбор» - это оксюморон :) –

+0

Не пробовал ваше предложение , но я тоже должен работать, спасибо! В Риме есть несколько способов, я знаю, что некоторые селекторы должны быть предпочтительнее из-за проблем с производительностью, но я далек от того, чтобы быть jquery-гуру. – Rebse

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