【问题标题】:Can't pass event object down to if statement in IE8无法将事件对象传递给 IE8 中的 if 语句
【发布时间】:2013-01-15 10:46:02
【问题描述】:

我有一个由单击事件触发的函数...当单击该函数时,应该从单击起源的 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');       
    }
 }

【问题讨论】:

  • IE8 不支持HTML5 File API 读取本地文件。所以,如果你尝试这个var files = docEventTrigger.target.files; alert(files);,你总是会在IE中得到undefined

标签: jquery internet-explorer events object triggers


【解决方案1】:

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

【讨论】:

  • 有什么解决方案,或者您建议我如何进行?我继续添加了内联 onchange 事件来传递对象,并且我还放入了目标 ||影子向导推荐的 srcElement。提前致谢!
  • @JSilva 不,根本不支持
【解决方案2】:

事件对象的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 相同)

【讨论】:

  • 我最终删除了对文件 api 的所有引用。原来对象一直在那里,文件 [] 只是给了我一个错误。猜猜我仍在尝试学习查看 DOM 中存在和不存在的最佳方法。 Firebug 让它变得简单,但在 IE 中我不知道可以使用什么。
  • 干杯,IE 确实有开发工具 (F12),但与其他浏览器相比,它相当有限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多