我有这个HTML:
<tr>
<td>
<input type="hidden" name="MatchId[]" value="">
<select name="TeamId[]">
<optgroup label="Women">
<option value="18">Women 1</option>
<option value="17">Women 2</option>
</optgroup>
<optgroup label="Men">
<option value="9">Men 1</option>
<option value="8">Men 2</option>
</optgroup>
</select>
</td>
<td>
<select name="Day[]">
<!-- blah -->
</select>
</td>
<td>
<input class="addButton" type="button" value="+">
</td>
<td>
<input class="removeButton" type="button" value="-">
</td>
</tr>
我想在点击+按钮时克隆该行,但也将<select>
的值设置为与原始行相同。
现在,我有这个代码,它成功地克隆了行,但是将新的<select>
字段留下了第一个值作为选择:
$('.addButton').livequery('click', function()
{
var $btn = $(this);
var $clonedRow = $btn.closest('tr').clone();
$btn.closest('tbody').append( $clonedRow );
});
我怎么能这样做?
编辑:辅助问题:在点击+按钮后,如何将焦点设置在克隆行的第一个字段上?
答案 0 :(得分:6)
您可以手动执行此操作:
$('.addButton').live('click', function()
{
var $btn = $(this);
var $row = $btn.closest('tr')
var $clonedRow = $row.clone();
$clonedRow.find("select").each(function(i){
this.selectedIndex = $row.find("select")[i].selectedIndex;
})
$btn.closest('tbody').append( $clonedRow );
});
答案 1 :(得分:2)
使用选择元素selectedIndex
$('.addButton').live('click', function()
{
var $btn = $(this);
var $clonedRow = $btn.closest('tr').clone();
var index = $('select', $btn.closest('tr')).prop('selectedIndex');
$('select', $clonedRow).prop('selectedIndex', index);
$btn.closest('tbody').append( $clonedRow );
});
答案 2 :(得分:1)
您可以将函数传递给val
,它会给出索引。另外,我建议将jQuery对象存储在变量中,这样就不必为每个选择构建它。
$('.addButton').live('click', function() {
var $btn = $(this),
$row = $btn.closest('tr'),
$clonedRow = $row.clone();
$selects = $row.find('select');
$btn.closest('tbody').append($clonedRow);
$clonedRow.find('select').val(function(index) {
return $selects.eq(index).val();
});
});