无法将事件对象传递给IE8中的if语句

时间:2013-01-15 10:46:03

标签: jquery internet-explorer events object triggers

我有一个由click事件触发的函数...当单击该函数时,应该从点击源自的dom对象中获取一些信息。所有这些在firefox中工作正常,但在IE8中它没有成功超过警报3。

 function handleFileSelect(docEventTrigger) {        
    alert('1');
    if($('#tblListDocs tr input[value!=""]').length>0){
        alert('2');
        updateClicked(instanceID);
    }else{         
        alert('3');
        var docName, docVersion, docDate, docAuthor, formHTML, actionText, docActions, docResults, frmTarget, docRowCount;
        var files = docEventTrigger.target.files;  
        alert('4');    
            for (var iCount = 0, f; f = files[iCount]; iCount++) {
              alert('5');
                 STUFF HAPPENS HERE      
                 document.forms["frmUploadDoc"].submit();
              alert('6');       
    }
 }

2 个答案:

答案 0 :(得分:1)

IE8(或IE9)不支持任何文件API。对于files[iCount]值的属性访问尝试,它会在undefined中抛出错误。

答案 1 :(得分:0)

事件对象的target属性不是跨浏览器。对于IE,它应该是srcElement

要使代码跨浏览器,请获取定义的任何一个:

alert('3');
var sender, docName, docVersion, docDate, docAuthor, formHTML, actionText, docActions, docResults, frmTarget, docRowCount;
sender = docEventTrigger.target || docEventTrigger.srcElement;
var files = sender.files;  
alert('4');   

也就是说,它不会像this other answer中所解释的那样对您的具体情况有所帮助。

为避免混淆事件,您可以传递对象本身:

<input type="file" onchange="handleFileSelect(this);" />

然后函数参数已经是文件输入本身。 (与我上面例子中的sender相同)