javascript中无法正常工作的事件顺序

order of events in javascript not functioning properly

本文关键字:工作 事件 顺序 常工作 javascript      更新时间:2023-09-26

我看过几篇关于这个主题的帖子,但都没有得到答案。我有一个onClick事件,它调用Uploadfile()函数,只有在调用Uploadfile()函数之后,我才希望调用EnableSaveButton()函数。下面粘贴的是我为点击事件、Uploadfile()函数和EnableSaveButton()函数准备的代码。目前只有Uploadfile()被调用,但EnableSavebutton()函数没有被触发。如果有人能告诉我我做错了什么,我将不胜感激。

***更新:让我重新表述一下这个问题。如何确保仅在调用UploadFile()之后才调用EnableSaveButton()。目前的情况是,EnableSaveButton在UploadFile()之前触发。

$("#btnUploadFile").click(function(event) {
    event.preventDefault();
    uploadFile();
    EnableSaveButton();
});
function uploadFile() {
    $.get('<%: Url.Action("UploadFile","Files") %>', null, function(getData) {
        $(getData).appendTo('body');
    });
}
function EnableSaveButton() {
    var selectedvalue = $("#FileGuid").val();
    alert(selectedvalue);
    if (selectedvalue != "") {
        $("#btnSave").removeAttr("disabled");
    }
}​
function (event) {
    event.preventDefault();
    EnableSaveButton();
}

此函数已声明,但未分配也未使用。。。所以您的函数EnableSaveButton没有被调用。

我相信您希望在UploadFile()函数完成之后(或者更具体地说,在UploadFile函数内部的Ajax调用完成之后)调用EnableSaveButton()函数,对吗?

$("#btnUploadFile").click(function (event) {
            event.preventDefault();
            uploadFile();
        });
  function uploadFile() {
        $.get(
            '<%: Url.Action("UploadFile","Files") %>',
            null,
            function (getData) {
                $(getData).appendTo('body');
                EnableSaveButton();
            }
        );
    }

您在单击处理程序中声明了一个从未被调用的匿名函数。

function (event) {
    event.preventDefault();
    EnableSaveButton();
}

为什么你不这么做:

$("#btnUploadFile").click(function (event) {
    event.preventDefault();
    uploadFile();
    EnableSaveButton();
});

这:

function (event) { 
    event.preventDefault(); 
    EnableSaveButton(); 
}

声明一个接受一个参数的匿名函数(称为事件)。然后它就不叫anwhere了。如果你想调用你的函数,那么你可以这样做:

(function (event) { 
    event.preventDefault(); 
    EnableSaveButton(); 
})(event);

或:

var handler = function (event) { 
    event.preventDefault(); 
    EnableSaveButton(); 
}
handler();

或者更简单:

EnableSaveButton(); 

那么,为什么不调用EnableSaveButton作为上传文件的ajax代码的回调呢。我一直在使用这种技术。ajax请求获取一些数据并将其转储到页面中,然后执行用户定义的回调以调整滚动条、表单元素等。