Условное действие jQuery при возникновении события - PullRequest
1 голос
/ 24 февраля 2010

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

<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. событие изменения не работает, если в списке выбора есть только один вариант, как во втором ряду моего примера выше, как добиться такого же поведения, как с событием изменения для этого случая?

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

Ответы [ 2 ]

1 голос
/ 24 февраля 2010

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

$('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);
});

и вот Рабочая демонстрация , чтобы показать его в действии. добавьте / отредактируйте URL, чтобы поиграть с кодом.

0 голосов
/ 24 февраля 2010

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

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

... или что-то похожее

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...