求助: 为何我这个代码里的事件会自动被window对象触发

问题描述

求助: 为何我这个代码里的事件会自动被window对象触发

用onchange绑定了一个事件,然而每次刷新页面会自动触发这个事件,alert了事件源获得了window对象
求解~~~~
代码如下

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>图片上传预览 ie6,7,8, firefox</title>
</head>
<body>
    <input type="file" multiple="true" id="picPath" name="imgPath" />
    <div id="Preview">
        <img id="Preview" />
        <img id="Preview2" />
    </div>
</body>
<script src="imageUpload.js"></script>
<script>
        document.getElementById("picPath").onchange = PreviewImage({
            PreviewElementId : "Preview",
            fileInput : this,
            width : "120px",
            height : "120px"
        });
</script>
</html>

下面是JS方法(未完成的方法)

  /*图片格式验证*/
function checkPic() {
    var picPath = document.getElementById("picPath").value;
    var type = picPath.substring(picPath.lastIndexOf(".") + 1, picPath.length).toLowerCase();
    if (type != "jpg" && type != "bmp" && type != "gif" && type != "png") {
        alert("请上传正确的图片格式");
        return false;
    }
    return true;
}

//图片预览
function PreviewImage(jsonObj) {
    var upload = jsonObj.fileInput;
    var PreviewElementId = jsonObj.PreviewElementId;
    alert(upload);
    var width = jsonObj.width;
    var height = jsonObj.height;

    if (checkPic()) {
            var imgPath;      //图片路径
            var imgPath2;
            var Browser_Agent = navigator.userAgent;
            //判断浏览器的类型
            if (Browser_Agent.indexOf("Firefox") != -1) {
                //火狐浏览器
                imgPath = window.URL.createObjectURL(upload.files[0]);   /*需要添加是否双图判断*/
                imgPath2 = window.URL.createObjectURL(upload.files[1]);
                document.getElementById(divImage).innerHTML = "<img id='imgPreview' src='" + imgPath + "' width='" + width + "' height='" + height + "'/>";
                document.getElementById(divImage2).innerHTML = "<img id='imgPreview' src='" + imgPath2 + "' width='" + width + "' height='" + height + "'/>";
            } else {
                /*多地址解析*/
                var valuesArray = upload.value.split(",");
                var imgSrc1 = valuesArray[0];
                var imgSrc2 = valuesArray[1];
                /*容器设置*/
                var localImagId1 = document.getElementById(divImage);
                var localImagId2 = document.getElementById(divImage2);
                //必须设置初始大小 

                //图片异常的捕捉,防止用户修改后缀来伪造图片
                //filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' http://')
                try {
                    localImagId1.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader((enabled='true' ,src='" + imgSrc1 + "');";
                    alert(localImagId1.style.filter);
                    /*localImagId1.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc1;
                    localImagId2.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc2;*/
                } catch (e) {
                    alert(e);
                    return false;
                }
               /* imgObjPreview1.style.display = 'none';
                imgObjPreview2.style.display = 'none';*/
                /*document.selection.empty();*/
                    }
    }
}

解决方案

document.getElementById("picPath").onchange = PreviewImage({

这句每次都执行了PreviewImage函数,此环境下this==window,然后将PreviewImage返回值作为onchange的事件,PreviewImage没有return返回值会默认返回undefined所以onchange为undefined没有绑定,改成这样才能绑定事件

  document.getElementById("picPath").onchange =function(){
                   PreviewImage({
            PreviewElementId : "Preview",
            fileInput : this,//此时this才是这个dom对象
            width : "120px",
            height : "120px"
        });
}
时间: 2024-10-27 10:53:36

求助: 为何我这个代码里的事件会自动被window对象触发的相关文章

在ASP.NET代码里访问跟踪信息

asp.net|访问 ASP.NET 2.0允许通过代码在TraceFinished事件里来访问每个请求的跟踪信息.TraceFinished事件是由TraceContext对象引发,用于在收集完所有请求信息后公开跟踪消息.可以利用此事件对跟踪信息进行不同的输出.以下代码就是用程序输出跟踪信息. C#: <%@ Page Language="C#" %><SCRIPT runat="server">protected void Page_Lo

ASP.NET技巧:ASP.NET代码里访问跟踪信息

asp.net|访问|技巧 ASP.NET 2.0允许通过代码在TraceFinished事件里来访问每个请求的跟踪信息.TraceFinished事件是由TraceContext对象引发,用于在收集完所有请求信息后公开跟踪消息.可以利用此事件对跟踪信息进行不同的输出.以下代码就是用程序输出跟踪信息. C#: <%@ Page Language="C#" %><SCRIPT runat="server">protected void Page

追踪ASP.NET代码里的bug

asp.net Web开发中一个棘手的问题是调试.在ASP或者简单JavaScript的时代,开发人员会利用print语句来追踪代码里的问题.随着微软引入ASP.NET,这一方法发生了改变,因为它包含了大量的特性,可以利用TraceContext类更加轻松地调试Web页面. 选择追踪的范围 在ASP.NET应用程序里,你可以启动对单个页面或者整个Web应用程序进行追踪的能力.Web.config这个文件用来启动在应用程序这一级别进行的追踪.下面就用到了web.config文件里的追踪元素: <t

php-PHP新手求助这段注册代码的各种问题

问题描述 PHP新手求助这段注册代码的各种问题 这是个注册代码,我需要在注册的时候能够判断有没有输入账号密码什么的,然后密码要验证两次是否相等,然后注册成功要上传到数据库,可是什么功能都不成功,搞了好久好麻烦,我的localhost没有账号密码 <!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/

java-我的Java代码怎么添加事件:点击“加水”,“请加水”就变成“不需要加水”?

问题描述 我的Java代码怎么添加事件:点击"加水","请加水"就变成"不需要加水"? import javax.swing.JLabel; import javax.swing.JPanel; public class Left { private JLabel textWater = new JLabel("请加水"); private JPanel panel1 = new JPanel(); public Left()

java AS新手求助。以下是代码:

问题描述 java AS新手求助.以下是代码: setOnCheckedChangeListener方法参数类型不匹配 ackage gke_code_jrxd.Demo.ui; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransaction; import

小白求助,java简化代码问题

问题描述 小白求助,java简化代码问题 public void UseProcessSum() throws IOException { sc = Output.getWorkbook(); XSSFSheet readsheet = readWorkbook(); for (; i <= lastnum; i++) { System.out.println("getsum"); XSSFRow readrow = readsheet.getRow(i);// 获取输入行 Pr

求助servlet 这段代码什么意思

问题描述 求助servlet 这段代码什么意思 */ @RequestMapping("/getTile.do") public @ResponseBody String getTile(HttpServletResponse response, @RequestParam(value = "map_id", required = true) String mapId, @RequestParam(required = true) int level, @Reque

传递-各位大神,这段代码里mSeletedImg.add(filePath)的点击地址是哪里?

问题描述 各位大神,这段代码里mSeletedImg.add(filePath)的点击地址是哪里? public class ImageAdapter extends BaseAdapter { private static Set mSeletedImg = new HashSet(); private String mDirPath; private ListmImgPaths; private LayoutInflater mInflater; public ImageAdapter(Co