我在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/

10-11 16:22