使用 jQuery 插入文件输入元素
我在使用 jQuery 插入文件输入元素时遇到问题。我想要发生的是,当用户使用输入元素选择文件时,jQuery 应该隐藏该输入并在其位置插入一个新的文件输入。
这是我的相关标记:
<div id="select_images">
<input type="file" name="images[]" multiple="multiple" />
</div>
和我的 Javascript:
$('#select_images input').change(function(){
// User selected some images to upload, hide this file input
$(this).css('right', '-10000px');
// Insert a new file input to take its place
$('#select_images').append('<input type="file" name="images[]" multiple="multiple" />');
});
它有点有效。当我使用页面上已有的文件输入选择一个文件时,jQuery 会隐藏它并插入一个新文件。然而,当我尝试再次执行相同操作时,jQuery 不会插入新的文件输入。
我看不出上面的代码只会插入一个额外的文件输入的任何原因,所以我很困惑。我已经使用 Firebug 和将表单数据发布到我的后端脚本来确认此行为。
任何帮助表示赞赏。谢谢!
I'm having trouble inserting file input elements with jQuery. What I want to happen is when a user selects a file using the input element, jQuery should hide that input and insert a new file input in its place.
Here's my relevant markup:
<div id="select_images">
<input type="file" name="images[]" multiple="multiple" />
</div>
And my Javascript:
$('#select_images input').change(function(){
// User selected some images to upload, hide this file input
$(this).css('right', '-10000px');
// Insert a new file input to take its place
$('#select_images').append('<input type="file" name="images[]" multiple="multiple" />');
});
It kind of works. When I select a file using the file input already on the page, jQuery hides it and inserts a new one. When I try to do the same again however, jQuery does not insert a new file input.
I can't see any reason that the above code will only insert one additional file input, so I'm pretty stumped. I've confirmed this behaviour using both Firebug and POSTing the form data to my backend script.
Any help is appreciated. Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尝试使用 live
当您动态地将元素添加到 DOM 时,事件处理程序不会自动附加到它们,要将事件处理程序附加到动态添加的元素,您可以使用
.live
或。委托
委托示例
.live
.delegate
何时应该使用 jQuery 的 Live 和委托方法
try using live
when you dynamically add the elements to the DOM the event handlers do not automatically get attached to them, to attach the event handlers to the dynamically added elements you can use
.live
or.delegate
example with delegate
.live
.delegate
When You Should Use jQuery’s Live and Delegate Methods
您添加的新输入没有任何
onchange
事件处理程序。如果将事件处理程序放入命名函数中,则可以轻松地将其绑定到您创建的新输入:The new input that you have added doesn't have any
onchange
event handler. If you put the event handler in a named function, you can easily bind it to the new input that you create: