jQuery的条件操作时,事件触发

jQuery的条件操作时,事件触发

问题描述:

我有一个包含与包含领先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. 如果选择列表只有 一个选项,我上面的示例的第二行中,如何 来实现类似的行为与这种情况下更改事件更改事件不起作用?

感谢您的任何提示!

如何看待这种情况,即处理复选框上的单击事件,如果选中,则评估行中选择的值?

$('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

只有一秒钟,但看看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