我在input type=file
中使用replaceWith处理用户要上传的文件的更改。
我有以下代码:
$('#add_cv_input').change(function() {
// here is some code
else {
alert('put one of this: pdf doc docx');
$("#add_cv_input").replaceWith('<input id="add_cv_input" type="file"/>');
}
});
现在的问题是,在用户第一次上传错误的扩展名之后,没有调用此jquery更改的事件。
我不知道为什么会这样。如果用户第一次上传有效的扩展名,然后将其更改为其他有效的扩展名,则一切正常。
最佳答案
销毁第一个项目时,事件处理程序将随之销毁。如果希望事件处理程序位于新项目上,则有两个选择:
创建新对象后,可以在新对象上重新安装事件处理程序。
您可以使用未销毁的父级的委托事件处理。
将委托事件处理与动态形式的.on()
一起使用可能是最简单的:
$(some parent selector).on('change', '#add_cv_input', function() {
// code here
});
在此处选择一些父选择器,该选择器尽可能接近
#add_cv_input
,但不会被破坏。如果要在替换元素后重新附加事件处理程序,则可以这样做(尽管委托事件处理会更干净):
function processChange() {
// here is some code
else {
alert('put one of this: pdf doc docx');
$("#add_cv_input").replaceWith('<input id="add_cv_input" type="file"/>');
$('#add_cv_input').change(processChange);
}
});
$('#add_cv_input').change(processChange);
关于javascript - jQuery replaceWith含义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12877196/