javascript - jQuery .on ('change' , function() {} 未在 asp.net Fileupload 控件上触发

标签 javascript jquery asp.net

我的 aspx 页面中有一个 Fileupload 控件和一个 img 标签,我可以在其中上传图像并在 img 标签中显示。

<asp:FileUpload ID="f_UploadImage" runat="server" />
    <br />
<img id="myUploadedImg" alt="Photo" style="width: 180px;" />

由于某些原因,我没有使用 HTML 输入标记。通过使用下面的代码,我正在访问文件上传更改触发器,单击“选择文件”选项时该触发器工作正常。

<script type="text/javascript">
$("#f_UploadImage").on('change', 'input', function () {
        var file, img;
        if ((file = this.files[0])) {
            img = new Image();
            img.onload = function () {
                sendFile(file);
            };
            img.onerror = function () {
                alert("Not a valid file:" + file.type);
            };
            img.src = _URL.createObjectURL(file);
        }
});
</script>

问题是:当我在我的 aspx 页面中放置另一个 HTML 按钮 id (btn_upload) 并单击该按钮时,我启用了对 fileupload 点击事件的访问,但是当我选择文件我的文件上传更改触发器不触发。下面是我尝试使用另一个按钮的代码。

$("#btn_upload").on('click', function () {
        $('#f_UploadImage').trigger('click');
    });

    $("#f_UploadImage").on('change', 'input', function () {
        var file, img;
        if ((file = this.files[0])) {
            img = new Image();
            img.onload = function () {
                sendFile(file);
            };
            img.onerror = function () {
                alert("Not a valid file:" + file.type);
            };
            img.src = _URL.createObjectURL(file);
        }
});

最佳答案

直接绑定(bind)change事件并且它应该起作用:-

$("#f_UploadImage").change(function () {

我已经验证了这一点,它对我来说工作得很好。

我的代码:

 <asp:FileUpload ID="fuTest" runat="server" />
 <input type="button" id="btnTest" value="Upload" />

JS:

$(document).ready(function () {
    $("input#fuTest").change(function () {
        alert(1);
     });

     $("#btnTest").click(function () {
        $("#fuTest").trigger("click");
     });
});

更新:

根据您的输入,您的代码在 form 标记内不起作用,因为默认情况下 button 控件的类型是 submit,因此您的情况是将表单发送回服务器,或者换句话说,正在发生回发,并且您的客户端代码无法正常工作。因此,为了在现有代码中防止这种情况,您可以使用 preventDefault ,如下所示:-

$("#btnUpload").click(function (e) {
     e.preventDefault();
     $("#fuImage").trigger("click");
});

\或\

您可以将按钮类型设置为按钮,这样它就不会将表单发布到服务器:-

 <button type="button" id="btnUpload">Upload Image</button>

关于javascript - jQuery .on ('change' , function() {} 未在 asp.net Fileupload 控件上触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33022605/

相关文章:

javascript - jQuery悬停功能显示覆盖但在悬停显示内容时关闭

jquery - jQTouch 不再支持 Android?

javascript - 转发器定义将从设计器中的嵌套转发器中删除

c# - WCF 公共(public)参数 ClientMessageInspector、DispatchMessageInspector 或替代方案?

javascript - KnockOut 在值更改时运行函数

javascript - 如何使用 javascript 更新 parse.com 中的当前对象?

javascript - 找不到face-api.js的404页面

javascript - 如何访问相邻表格单元格中的文本?

c# - App_Code 和服务器

javascript - GoogleMap API 事件点击放大