3

我有一个看起来像这样的按钮:

<asp:Button ID="btnSave" runat="server" CssClass="SubmitButton" Text="Order >>" OnClientClick="return SaveChanges();" OnClick="btnSave_Click" />

一个看起来像这样的 javascript 函数:

function SaveChanges() {
    var success = false;

    var arr1 = new Array();
    var arr2 = new Array();
    var arr3 = new Array();
    for (var i = 0; i < self.frames.length-1; i++) {
        arr1[i] = document.getElementById("frame" + i.toString()).contentWindow.getFramePSFID();
        arr2[i] = document.getElementById("frame" + i.toString()).contentWindow.getFrameHeading();
        arr3[i] = document.getElementById("frame" + i.toString()).contentWindow.saveSvg();
    }

    Scripts.WebServices.WSCommon.SaveChanges(arr1, arr2, arr3, function (result) {
        return true;
    });
}

所在的块return true;是 Web 服务调用(需要几秒钟)完成并返回结果后发生的情况。不管我放什么,btnSave_Click总是触发。(如果我删除btnSave_Click并更改return true;alert('test');,则会触发警报。)。

一旦 Web 服务返回 true ,我需要做什么才能强制btnSave_Click触发?

4

2 回答 2

0

function在您的 Web 服务调用中是异步调用返回时要执行的回调方法。

但你的SaveChanges方法不会等到那时。

我认为您可以做到这一点的一种方法是在您的网络表单中添加一个隐藏字段或向您的输入按钮添加一个额外的(您自己的)属性。在回调方法中将其值设置为某个有意义的值。在调用 webService 之前检查此值.. 如果找到返回 true,否则调用您的 webService 并返回 false。

并且还添加代码以在回调方法中使用 jQuery 或 javascript 来单击您的按钮,而不是返回 true..

像这样的东西

function SaveChanges() {

   //your array code..

    if (<check_your_hidden_field_value>){
        return true;
    }else{
        Scripts.WebServices.WSCommon.SaveChanges(arr1, arr2, arr3, function (result) {

            //set your hiddenfield data here..

            document.getElementById('<%= btnSave.ClientID %>').click();//click button
        });
        return false;
    }
}
于 2012-12-03T09:02:14.540 回答
-1

稍微调整一下怎么样SaveChanges()

function SaveChanges() {
    var success = false;

    var arr1 = new Array();
    var arr2 = new Array();
    var arr3 = new Array();
    for (var i = 0; i < self.frames.length-1; i++) {
        arr1[i] = document.getElementById("frame" + i.toString()).contentWindow.getFramePSFID();
        arr2[i] = document.getElementById("frame" + i.toString()).contentWindow.getFrameHeading();
        arr3[i] = document.getElementById("frame" + i.toString()).contentWindow.saveSvg();
    }

    Scripts.WebServices.WSCommon.SaveChanges(arr1, arr2, arr3, function (result) {
        success = true;
        btnSave_Click();
    });

    return success;
}
于 2012-12-03T08:04:58.387 回答