2010-02-23 33 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 
    } 
} 

編輯:

這是我怎麼會粗暴對待它:

// 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 2010-02-23 23:11:43

+0

..不過你可以用其他方式發佈解決方案嗎? – Rebse 2010-02-23 23:21:04

+0

那麼,如果選擇該行只有一個選項,則用戶不能改變主意,因此當用戶選中/取消選中複選框(注意:使用單擊事件)時,我們可以安全地採取行動。我們還可以將事件處理程序綁定到select元素上的change事件,以運行與在複選框中運行相同的代碼。因此,將這些代碼提取到一個單獨的函數中,並在每種情況下從事件處理函數中調用它。 – 2010-02-23 23:24:26

0

只有一秒鐘,但看看prev方法: 例如,

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

...或者類似的東西

而對於第二部分,你應該添加一個空字符串選項中包含「選擇一個......」可以忽略不計的名稱,但將允許因爲你的行爲在選擇單一選擇時觸發。

+0

希望將有另一種解決方案的單選問題 似乎我必須去與一個虛擬選項「選擇一個..」或類似 – Rebse 2010-02-23 23:24:00

+0

單選項「選擇」是一個矛盾:) – 2010-02-23 23:38:58

+0

沒有嘗試你的建議,但我也應該工作,謝謝! 羅馬有幾種方法,我知道一些選擇器應該是首選,因爲性能問題,但我遠不是一個jquery大師.. – Rebse 2010-02-24 21:23:57