当前位置: 首页 > 知识库问答 >
问题:

Javascript DOM鼠标事件不适用于IE和Mozilla

岑和风
2023-03-14

正在处理自定义文件上载应用程序。我有两个主要问题:

  1. 下面给出的代码不会打开Mozilla和IE的文件对话框。
  2. 在Chrome中它起作用了,但是当我第一次点击就选择文件时,它从不将文件添加到正文中。但在第二次单击时,它会将第一次单击时浏览的文件添加到正文中。

对以上问题的任何帮助都将不胜感激。

function perform1Click(node) {

            alert("INIT");
            var evt = document.createEvent("MouseEvents");
            evt.initEvent("click", true, false);
            node.dispatchEvent(evt);

            alert(3)
            getFile(evt);

        }

        function getFile(event) {

            var files = event.target.files;
            var totalSize = 0;

            if (totalSize > 1024*10) {

                alert('Total size exceed 1 Mb.');
                return;
            }
            //alert(files)
            //alert(files.length);
            for (var i = 0, f; f = files[i]; i++) {

                displayFileList(f.name, f.size);
                totalSize = totalSize+f.size;
            }
        }

        function displayFileList(name, size) {

            if (name != '') {

                var top_plugin = document.getElementById('top_plugin');

                // create tag 
                var ptag = document.createElement("p");

                // create div
                var divBox = document.createElement("div");
                divBox.setAttribute('class', 'divBox');

                // create input[type='checkbox']
                var inputCheckBox = document.createElement("input");
                inputCheckBox.setAttribute('type', 'checkbox');
                inputCheckBox.setAttribute('id', 'checkboxClass')

                // add checkbox to div.
                divBox.appendChild(inputCheckBox);

                // create text node for divBox and add it to divBox.
                var txtNode = document.createTextNode(name);
                divBox.appendChild(txtNode)

                var sizeDivBox = document.createElement("p");
                sizeDivBox.setAttribute('style', 'clear:both; display: inline-block;');

                var txtSizeNode = document.createTextNode(size);
                sizeDivBox.appendChild(txtSizeNode);
                divBox.appendChild(sizeDivBox);

                // add divBox to ptag.
                ptag.appendChild(divBox);
                //ptag.appendChild(divTxt);

                // add ptag to top_plugin div.
                top_plugin.appendChild(ptag);
            }

            // if file value is not null, make it blank.
            if (name != '')
            {
                name = '';
            }
        }

共有1个答案

唐哲
2023-03-14

我找到了解决同样问题的方法。请在下面找到新代码。

   function uploadDFiles() {

        var file = document.getElementById('_file');
        file.click();

        try {
            file.addEventListener("change", getFileName);
        }
        catch (e) {
            file.attachEvent("onclick", getFileNameOnIE);
            alert("Error:: "+e.description);
        }
    }

    function getFileName(event) {

        var files = event.target.files;
        for (var i = 0, f; f = files[i]; i++) {

            var fileName = f.name;
            var fileSize = f.size;

            var fSize = bytesToSize(fileSize, 2);

            displayFileList(fileName, fSize);
        }
    }

但现在我有了新问题。这段代码在IE中不起作用。对于IE我使用的是attachEvent方法,但它不起作用。请找到下面的代码:

    function getFileNameOnIE(event) {

        alert(event.type);
        var files = event.target;
        alert(files.length);

        for (var i = 0, f; f = files[i]; i++) {

            displayFileList(f.name, f.size);
        }
    }

现在有人能给我提供同样的解决方案吗?

--

Tks巴拉特

 类似资料:
  • 您可以从http://jsbin.com/husamupi/1/edit试用代码

  • 问题内容: 我在框的选项标签中使用事件 事件在IE和Chrome上不起作用,但在Firefox中工作正常,在这里我不想在选择标签bcz上使用事件,如果用户再次选择相同的选项,则不会触发事件 例如:假设第一次用户选择“一个”下拉菜单,我将在处理了一些用户关闭的弹出窗口后打开一个弹出窗口,假设如果用户希望选择相同的“一个”下拉菜单,则不会触发任何事件。可以使用onclick事件解决在选项标签上,但不适

  • 问题内容: 以下代码可在Google Chrome beta和IE 7中运行。但是,Firefox似乎对此有问题。我怀疑这是我的CSS文件如何包含的问题,因为我知道Firefox对跨域导入不太友好。 但这仅仅是静态HTML,而没有跨域问题。 在我的landing-page.html上,我像这样进行CSS导入: 在main.css中,我还有另一个导入,例如: 在type.css中,我有以下声明: 我

  • 在本章中,我们将详细介绍鼠标事件及其属性。 请注意:此类事件不仅可能来自于“鼠标设备”,还可能来自于对此类操作进行了模拟以实现兼容性的其他设备,例如手机和平板电脑。 鼠标事件类型 我们已经见过了其中一些事件: mousedown/mouseup 在元素上点击/释放鼠标按钮。 mouseover/mouseout 鼠标指针从一个元素上移入/移出。 mousemove 鼠标在元素上的每个移动都会触发此

  • 鼠标事件的种类 鼠标事件指与鼠标相关的事件,继承了MouseEvent接口。具体的事件主要有以下一些。 click:按下鼠标(通常是按下主按钮)时触发。 dblclick:在同一个元素上双击鼠标时触发。 mousedown:按下鼠标键时触发。 mouseup:释放按下的鼠标键时触发。 mousemove:当鼠标在一个节点内部移动时触发。当鼠标持续移动时,该事件会连续触发。为了避免性能问题,建议对该

  • 我正在尝试接收JavaFX 2.2中一个不可见节点的MouseEvents。可以把它想象成一个互动但不可见的区域,比如当鼠标悬停在它上面时,它会触发一个动作。问题是,这不是一个静态定义的区域,但有多个区域(很多)可以被应用程序移动和调整大小。所以对于我的用例来说,全局监听鼠标移动并手动检测鼠标移动事件会有很大的开销。 目前,我正在试验一个透明矩形(),但实际/最终的应用程序将使用某种窗格,因为它实