日期:2014-05-16  浏览次数:20358 次

大牛在哪里???关于动态生成<input type="file">的问题。
本人动态生成语句如下;
var input_file=document.createElement('input');

input_file.setAttribute('type','file');

input_file.setAttribute('name','pictures[]');

if(window.addEventListener)
{
input_file.addEventListener('change',PreviewImage);
}
else
{
input_file.attachEvent('onchange',PreviewImage)
}
function PreviewImage()
{
         this.value;//函数里面调用这句,在chrome,FF中有效,在IE中却无效,该怎么解决这个兼容问题
}

还有额外问问:addEventListener('change',函数名) 如果该函数带参数,又该怎么办呢?

------解决方案--------------------
应该是低版本的IE无效吧?

低版本的IE,这个时候,this是等于window的,IE9+的应该是可以的。

function PreviewImage(e){
e = e 
------解决方案--------------------
 window.event;//获取事件
var target = e.srcElement 
------解决方案--------------------
 e.target;//获取目标元素
var tagName = target.tagName.toLowerCase();//获取目标元素的标签名,并变成小写
if(tagName == "input"){
//判断是否为input标签。如果是则执行
alert(target.value);//获取input的value值。
}
}


试试这样写呗,我这里带的e作为参数,在绑定事件时,是可以不写的。至于其他的参数,你就再套一层函数吧,类似这样

function PreviewImage(e){
function  aa(x,y){
e = e 
------解决方案--------------------
 window.event;//获取事件
var target = e.srcElement 
------解决方案--------------------
 e.target;//获取目标元素
var tagName = target.tagName.toLowerCase();//获取目标元素的标签名,并变成小写
if(tagName == "input"){
//判断是否为input标签。如果是则执行
alert(target.value);//获取input的value值。
}
}
aa(x,y);
}


试试。。
------解决方案--------------------
attachEvent方法添加的事件,this为window对象,不是对应的控件

input_file.setAttribute('type','file');

input_file.setAttribute('name','pictures[]');

if(window.addEventListener)
{
input_file.addEventListener('change',function(){PreviewImage(input_file,....其他参数)},false);
}
else
{
input_file.attachEvent('onchange',function(){PreviewImage(input_file,....其他参数)})
}

function PreviewImage(f,....其他参数)
{
         f.value;//函数里面调用这句,在chrome,FF中有效,在IE中却无效,该怎么解决这个兼容问题
}