使用 Jquery 限制以表单形式克隆的文件输入
我使用这个 Jquery 函数来克隆表单中的文件输入字段,
$(function() {
var scntDiv = $('#clone');
var i = $('#clone p').size() + 1;
$('#addImg').live('click', function() {
$('<p><label for="attach"><input type="file" name="attachment_'+ i +'" /> <a href="#" id="remImg">Remove</a></label></p>').appendTo(scntDiv);
i++;
return false;
});
$('#remImg').live('click', function() {
if( i > 2 ) {
$(this).parents('p').remove();
i--;
}
return false;
});
});
是否可以限制可以克隆的字段?假设有 4 个字段?
非常感谢,
菲利普
i use this Jquery function to clone the file input fields in my form,
$(function() {
var scntDiv = $('#clone');
var i = $('#clone p').size() + 1;
$('#addImg').live('click', function() {
$('<p><label for="attach"><input type="file" name="attachment_'+ i +'" /> <a href="#" id="remImg">Remove</a></label></p>').appendTo(scntDiv);
i++;
return false;
});
$('#remImg').live('click', function() {
if( i > 2 ) {
$(this).parents('p').remove();
i--;
}
return false;
});
});
is it possible to limit the fields that can be cloned? lets say a number of 4 fields?
thanks a lot,
Philip
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
例如,首先在添加输入的函数中使用它:
它使用以
attachment_
开头的名称属性对输入进行计数,如果找到 4,则离开该函数。此外:您不应该对克隆的元素使用 ID,因为 ID 必须是唯一的,但在本例中它们不是唯一的。使用其他属性,例如
class
或name
。Use for example this first inside the function that adds an input:
It counts the input's with a name-attribute that starts with
attachment_
and leaves the function if 4 are found.Furthermore: you shouldn't use IDs for the elements that you clone, because IDs have to be unique, what they are not in this case. Use other attributes like
class
orname
.除了 Dr.Molle 的回答之外...检查/限制服务器端输入字段的数量。因为JS可以在客户端操作..
In Addition to the answer from Dr.Molle...check/limit the amount of the input fields on the server side. Because JS can be manipulated on the client side..
要真正正确处理它,您需要其他东西,如下所示:
您可以对其进行测试(查看生成的 HTML /节点)在这里。
它会循环执行什么操作并找到第一个可用的
i
来使用。您的原始代码假设最后一个始终是被删除的,但情况可能并非如此,并且您仍然会遇到重复的数字。相反,这个循环会获取第一个可用索引并使用它...如果我们到达4
并且它们都在使用中,则中止(您可以添加一个alert()
或if
中的内容(如果您愿意的话)。另请注意
remImg
类的使用,因为它是重复的,以及.delegate()
效率更高一点...您也可以使用普通的 #addImg 上的“nofollow">.click()
处理程序,但我不能 100% 确定它在此处的位置。To really handle it correctly, you need something else, like this:
You can test it out (seeing the generated HTML/nodes) here.
What this does it loop through and finds the first available
i
to use. Your original code assumes the last one is always the one removed, this may not be the case, and you'd still have a number repeated. Instead this loops though, gets the first available index and uses that...if we get to4
and they were all in use, abort (you could add analert()
or something in thatif
as well, if you wanted).Also note the use of a class for
remImg
since it's repeated, and the use of.delegate()
to be a bit more efficient...you can also probably use just a normal.click()
handler on#addImg
, but I'm not 100% sure of it's location here.