没事更一下 。。。
我以为重新生成还是比较稳妥得方法, 下面代码实现在兼容vue里面得class, 哈哈, 原生\jq等都可以使用, 只不过兼容了vue。
废话不多说, 放代码.
ReInput({target, ok, params, type}){
letparam = [].slice.call(params)
.filter((_, i) => i != 0)
let parentNode = target.parentNode
let dataVal = Object.keys(target.dataset)[0]
let input = document.createElement('input')
input.type = type || 'file'
input.onchange = e => ok.apply(null, [e, ...param])
input.dataset[dataVal] = ""
input.setAttribute('class', target.getAttribute('class'))
parentNode.removeChild(target)
parentNode.appendChild(input)
}
USE:
ReInput({ INPUTDOM, ok: FUNC, params: arguments, type })
*type是可选得
例子:
//VIEW:
<input type="file" @change="(e) => func(e, index)" />
// JS:
func(e, index){
// CODE
Config.ReInput({ target: e.target, ok: this.func, params: arguments })
}
Tip:
如果节点有其他得特殊地方, 可以自己扩展。
在项目中发现一个问题, 如果vue比较复杂得话, 这个会出bug,(DOM节点问题, 比如你vue在input上面使用了v-if在变动, 这时候会找错了值) 我们换一下写法
ReInput({target}){
target.value = null
}
短小精悍!
--END---