我有一个输入类型文件字段,附近有一个标签,如“添加更多”,这是一个超级链接。在单击此超链接时,它应该创建另一个输入类型文件字段。创建另一个输入类型文件字段后,应该有“删除”之类的链接,单击此链接将仅删除相应的文件字段。
请注意,添加此文件字段没有限制,但在最坏的情况下,我将最多10个文件字段maximun。我的意思是说应该没有条件来检查它是否达到了最大限度。
您可以在此处查看我的代码。http://jsfiddle.net/inDiscover/6hVkw/
<table>
<tr id="bkup_doc_rw">
<td align="right"><label class="letter_font" for="bkup_doc_proof">Document :</label></td>
<td> <input type="file" name="bkup_doc_proof" id="bkup_doc_proof" required/> <a class="letter_font" style="text-decoration:none;cursor:pointer;" href="#" id="addNew">Add more </a>
</td>
</tr>
</table>
var fle_cnt = 1;
$('#addNew').click(function() {
fle_cnt++;
event.preventDefault ? event.preventDefault() : event.returnValue = false;
$('#bkup_doc_rw').after('<tr><td> </td><td>
<input type="file" name="bkup_doc_proof" id="bkup_doc_proof_'+fle_cnt+'"> <a class="letter_font" style="text-decoration: none;cursor: pointer;" href="#" id="remNew">Remove</a></td></tr>');
return false;
});
$(document).on('click', '#remNew', function() {
event.preventDefault ? event.preventDefault() : event.returnValue = false;
$('#remNew').parents('tr').remove();
return false;
});
这里的问题是当我试图在“删除”标签上进行攻击时,它不会删除相应的文件字段,而是随机删除。我知道这个问题正在发生,因为我在删除文件时没有使用唯一ID(file_cnt)。
任何人都可以帮助我以更好的方式修改我的代码。
答案 0 :(得分:1)
试试这个:
var fle_cnt = 1;
$('#addNew').click(function (event) {
fle_cnt++;
event.preventDefault();
$('#bkup_doc_rw').after('<tr><td> </td><td><input type="file" name="bkup_doc_proof" id="bkup_doc_proof_' + fle_cnt + '"><a class="letter_font remNew" style="text-decoration: none;cursor: pointer;" href="#">Remove</a></td></tr>');
});
$(document).on('click', '.remNew', function (event) {
event.preventDefault();
$(this).closest('tr').remove();
});
的变化:
#addNew
点击中传递了回调中的事件。id
属性更改为class
。.remNew
。$('#remNew')
将上下文选择器设置为$(this)
。.remNew
点击事件return false;
,因为您已经在使用event.preventDefault();
,如果您在回调中传递事件,它将会起作用。.parents()
使用.closest()
来遍历。答案 1 :(得分:0)
#remNew
这就是原因!
ID是唯一的。
$('#remNew').parents('tr').remove();
到
$(this).parents('tr').remove();
答案 2 :(得分:0)
试着这个:
$(document).on('click', 'a.letter_font', function() {
event.preventDefault ? event.preventDefault() : event.returnValue = false;
$(this).parents('tr').remove();
return false;
});
点击事件中的使用$(this)。这样您就可以管理触发事件的确切对象。
答案 3 :(得分:0)
HTML网页必须具有ID唯一的ID。让remNew
成为一个课程,你很好:
<强> JSFiddle 强>
答案 4 :(得分:0)
var fle_cnt = 1;
$('#addNew').click(function() {
fle_cnt++;
event.preventDefault ? event.preventDefault() : event.returnValue = false;
$('#bkup_doc_rw').after('<tr><td> </td><td> <input type="file" name="bkup_doc_proof" id="bkup_doc_proof_'+fle_cnt+'" /> <a class="letter_font remNew" style="text-decoration: none;cursor: pointer;" href="#" >Remove</a></td></tr>');
return false;
});
$(document).on('click', '.remNew', function() {
event.preventDefault ? event.preventDefault() : event.returnValue = false;
$(this).closest("tr").remove();
return false;
});
您使用的是id =“remNew”,不应该使用多个ID - 它们专门用于创建唯一标识, 对于具有类似属性的DOM元素,我们总是使用类 - 所以我用class =“remNew”
替换了id点击我们能够使用此实例检测到的一些元素,并使用jquery 最近删除特定的tr标记
答案 5 :(得分:0)
将remNew作为课程,你也可以尝试这种方式
`http://jsfiddle.net/MRqN4/`