代码之家  ›  专栏  ›  技术社区  ›  mjc

Internet Explorer文件输入更改

  •  1
  • mjc  · 技术社区  · 16 年前

    我有这些动态创建的文件输入HTML元素,这些元素与jquery ajax文件上载插件一起使用。

    我希望在输入值更新后开始文件上载。然而,Internet Explorer似乎忽略了javascript onchange。

    我怎样才能在IE中实现这一点?

    例子:

    var html = $('<div class="add_input">'+
            '<input type="file" name="file"/></div>').change(submit);
    
    $('#add_inputs').prepend(html);
    
    2 回复  |  直到 13 年前
        1
  •  4
  •   jitter    16 年前

    你可以用这些线来代替上面的内容

    var html = $('<div class="add_input"><input type="file" name="file"/></div>');
    $('#add_inputs').prepend(html);
    $("div.add_input > input[name='file']").change(submit);
    

    var html = $('<div class="add_input"><input id="filer" type="file" name="file"/></div>');
    $('#add_inputs').prepend(html);
    $("#filer").change(submit);
    
        2
  •  4
  •   bobince    16 年前

    当您在jquery中从HTML创建元素时,返回的句柄引用了最外层的元素,因此您将 change 上的事件处理程序 <div> 而不是 <input> .

    尽管如此,这在大多数浏览器中仍然有效,因为在 DOM Level 2 Events 规格 改变 event__bubbles_向上打开文档以在文档更改时通知其父级,因此 <DIV & GT; 会收到关于其任何子项的任何更改的通知 <输入> 但是,IE有自己的事件模型,其中 change does not bubble .

    另一种选择:

    ($('<input type="file" name="file" />')
        .change(submit)
        .prependTo('#add_inputs')
        .wrap('<div class="add_input"></div>')
    );