关于ajaxFileUpload造成 input[type=file] change事件只能触发一次的问题
现在发现的问题
通过js绑定的input[type=file]
change
事件只能触发一次
原因
该问题并不是由change事件失效造成的,而是ajaxFileUpload插件造成的,它会把原来的file元素替换成新的file元素,所以之前绑定的change事件就失效了,需要重新绑定一下
除了重新绑定以外,如果是使用$fileInput.trigger('click')
方式,失效原因是$fileInput
仍指向旧元素,替代方案分为以下两步
- 首先将ajaxFileUpload源码中
$(oldElement).clone()
(有些版本中为jQuery(oldElement).clone()
)改为$(oldElement).clone(true)
这样可以在复制元素的同时复制事件 - 将
$fileInput.trigger('click')
改为$('#id').trigger('click')
对保证新元素进行trigger而不是旧元素
如果你想要知道具体原因,请往下看
1 | /** |
所以提交完后 原来上传的位置实际已经被newElement替代 但是如果在上传之前就指定了变量指向原input[type=file] ,那么上传之后将依旧指向oldElement(其实已经在表单里),此时trigger会生效,但是该元素实际已经被ajaxFileUpload所删除 ,只存在于内存中,change事件似乎不会生效了(此处原因不详,如果知晓请告诉我)