我有一个表单会在点击时创建自己的副本。
如果不是第一行,我希望能够清除输入字段并在另一次单击时隐藏特定的div。如果这是第一个div,它应该只清除表格。
我得到的是:
<div id="fields_1" style="margin-bottom: 5px;" class="items">
<div class="form_div">
<input name="01_name" id="01_name" value="" placeholder="name" type="text" />
</div>
<div class="form_div plusminus">
<div class="minus">
<span>Delete Row</span>
</div>
</div>
</div>
<div id="fields_2" style="margin-bottom: 5px;" class="items">
<div class="form_div">
<input name="02_name" id="02_name" value="" placeholder="name" type="text" />
</div>
<div class="form_div plusminus">
<div class="minus">
<span>Delete Row</span>
</div>
</div>
</div>
$(document).ready(function(){
$(".minus").click(function(){
$(this).parent('div').parent('div').find(':input').val('');
if($(this).parent('div').parent('div').not('#fields_1'))
{
$(this).parent('div').parent('div').hide('slow');
}
});
});
任何人都可以看到我错了吗?
答案 0 :(得分:1)
不要使用多个parent()
功能。相反,请使用closest()
。并且,使用:first-of-type
选择器。
也许这会有所帮助:
$(document).ready(function(){
$(".minus").click(function(){
$(this).closest('div.items').find('input').val('');
$(this).closest('div.items').not('div.items:fist-of-type').hide('slow');
});
});
答案 1 :(得分:0)
您想要更改这三行:
if($(this).parent('div').parent('div').not('#fields_1'))
{
$(this).parent('div').parent('div').hide('slow');
}
是这样的:
$(this).parent('div').parent('div').not('#fields_1').hide('slow');
原因是.not
用于过滤查询选择。它不会返回true
或false
。
因此,当您执行$(this).parent('div').parent('div')
时,您可以选择div
。现在当您在该选择上运行.not('#fields_1')
时,您删除任何为真的div,其中包含fields_1
的ID“。现在,您选择的div
不包含id
,您可以对该过滤组执行任何操作。