我有几种形式需要使用一些多选框。 (关联公司列表,来源清单,产品清单等......)每个表格都可以拥有自己的多箱设备,无论客户需要什么。
我还创建了一个链接,允许用户在任何多选框中“全选”选项。到目前为止,事情很有效!但是我想让jquery变得更聪明一些。
以下是我编码的示例:
<table>
<tr>
<td><div id="allaffs" class="selectAll">select all</div></td>
</tr>
<tr>
<td>
<select name="affid[]" id="affid" size="15" style="width:230px;height:300" multiple="multiple">
<option value="0" selected="selected">--no affiliate assigned--</option>
<? while($r = mysql_fetch_array($somequerystuff)){ ?>
<option value="<?php echo $r['affid']; ?>" selected="selected"><?php echo $r['affname']; ?></option>
<? } ?>
</select>
</td>
</tr>
</table>
<table>
<tr>
<td><div id="allsources" class="selectAll">select all</div></td>
</tr>
<tr>
<td>
<select name="sourceid[]" id="sourceid" size="15" style="width:230px;height:300" multiple="multiple">
<option value="0" selected="selected">--no source assigned--</option>
<? while($r = mysql_fetch_array($somequerystuff)){ ?>
<option value="<?php echo $r['sourceid']; ?>" selected="selected"><?php echo $r['sourcename']; ?></option>
<? } ?>
</select>
</td>
</tr>
</table>
<script language="javascript" type="text/javascript">
$(document).ready(function(){
$(".selectAll").click(function(){
var theID = $(this).attr('id');
if(theID=='allaffs'){ $("#affid option").attr("selected","selected"); }
if(theID=='allsources'){ $("#sourceid option").attr("selected","selected"); }
});
});
</script>
这完全有效。但是我倾向于为其他过滤原因添加更多的多盒子。 我想让jquery检测.selectAll类的click事件,但要使它足够智能,以便在下一个可用的多框中选择所有选项。这样我就不必在新框的jquery代码中创建一个新行。
答案 0 :(得分:6)
我不是将它基于位置(下一个可用的多框),而是使用数据属性来存储相关多框的id。
<div class="selectAll" data-multi-id="sourceid">select all</div>
然后在你的剧本中:
<script language="javascript" type="text/javascript">
$(document).ready(function(){
$(".selectAll").click(function(){
var multi = $(this).data('multi-id');
$('#' + multi + ' option').attr('selected', 'selected');
});
});
</script>
答案 1 :(得分:3)
对我来说,一个简洁的方法是将<select multiple="multiple">
框包装起来,并在特定的父元素中选择“全部”(例如div
),然后使用.parent()
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
</head>
<body>
<div>
<span class="selectAll">Select all</span>
<select multiple="multiple">
<option>1</option>
<option>2</option>
</select>
</div>
<div>
<span class="selectAll">Select all</span>
<select multiple="multiple">
<option>1</option>
<option>2</option>
</select>
</div>
<span class="selectAll">Select really all</span>
<script>
$(".selectAll").click(function () {
$(this).parent().find('option').attr('selected','selected');
});
</script>
</body>
</html>