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>
这给了我选择的选项的值,精但有两个问题仍=
-
如何检查是否勾选了同一个tr中的前导复选框?
$('select').change(function(){ if (the leading checkbox is checked) { run my action.. } });
如果选择列表只有 一个选项,我上面的示例的第二行中,如何 来实现类似的行为与这种情况下更改事件更改事件不起作用?
感谢您的任何提示!
答
如何看待这种情况,即处理复选框上的单击事件,如果选中,则评估行中选择的值?
$('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与代码一起玩。
答
只有一秒钟,但看看prev方法: 例如,
jQuery(this).prev("td").child("input[name=module]").val() != 'undefined'
...或者类似的东西
而对于第二部分,你应该添加一个空字符串选项中包含“选择一个......”可以忽略不计的名称,但将允许因为你的行为在选择单一选择时触发。
也是我的第一个雄心壮志,但正常的流程就像是=用户决定要交付哪些模块,因此他会检查相关复选框。之后他选择了合适的标签,意味着他选择了一个选项,通常他改变了主意,意味着复选框保持选中状态,但选定的选项发生变化。如果我以这种方式行事,将会有什么解决方案? – Rebse 2010-02-23 23:11:43
..不过你可以用其他方式发布解决方案吗? – Rebse 2010-02-23 23:21:04
那么,如果选择该行只有一个选项,则用户不能改变主意,因此当用户选中/取消选中复选框(注意:使用单击事件)时,我们可以安全地采取行动。我们还可以将事件处理程序绑定到select元素上的change事件,以运行与在复选框中运行相同的代码。因此,将这些代码提取到一个单独的函数中,并在每种情况下从事件处理函数中调用它。 – 2010-02-23 23:24:26