Javascript ASP.NET按钮,仅当OnClientClick返回true时才执行OnClick

Javascript ASP.NET按钮,仅当OnClientClick返回true时才执行OnClick,javascript,asp.net,web-services,Javascript,Asp.net,Web Services,我有一个按钮,看起来像: <asp:Button ID="btnSave" runat="server" CssClass="SubmitButton" Text="Order >>" OnClientClick="return SaveChanges();" OnClick="btnSave_Click" /> function SaveChanges() { var success = false; var arr1 = new Array();

我有一个按钮,看起来像:

<asp:Button ID="btnSave" runat="server" CssClass="SubmitButton" Text="Order >>" OnClientClick="return SaveChanges();" OnClick="btnSave_Click" />
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;
    });
}

一个javascript函数,看起来像:

<asp:Button ID="btnSave" runat="server" CssClass="SubmitButton" Text="Order >>" OnClientClick="return SaveChanges();" OnClick="btnSave_Click" />
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;
    });
}
函数SaveChanges(){
var成功=false;
var arr1=新数组();
var arr2=新数组();
var arr3=新数组();
对于(变量i=0;i
返回true的块
is是web服务调用(需要几秒钟)完成并返回结果后发生的情况。不管我在那里放了什么,
btnSave\u单击始终会触发。(如果我删除
btnSave_单击
并将
返回true;
更改为
警报(“测试”);
,警报将触发。)


我需要做什么才能强制
btnSave\u单击
仅在web服务返回true后触发?

SaveChanges()进行一些调整怎么样

函数SaveChanges(){
var成功=false;
var arr1=新数组();
var arr2=新数组();
var arr3=新数组();
对于(变量i=0;i
函数
在Web服务调用中是一种回调方法,在异步调用返回时执行

但是您的
SaveChanges
方法不会等到那时

我认为有一种方法可以做到这一点,那就是在你的网络表单中有一个隐藏的字段,或者在你的输入按钮中添加一个额外的(你自己的)属性。。在回调方法中将其值设置为某个有意义的值。。在调用Web服务之前,请检查此值。。如果发现返回true,则调用Web服务并返回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;
    }
}
函数SaveChanges(){
//您的数组代码。。
如果(){
返回true;
}否则{
Scripts.WebServices.WSCommon.SaveChanges(arr1、arr2、arr3、函数(结果){
//在此处设置hiddenfield数据。。
document.getElementById(“”)。单击();//单击按钮
});
返回false;
}
}

查看此问题:btnSave_Click()在服务器端处理它将不起作用,它将始终返回false,您必须在SaveChanges范围之外声明成功function@user982119我认为尤哈内斯的解决方案几乎是好的。只是一点零钱。Scripts.WebServices.WSCommon.SaveChanges(arr1、arr2、arr3,函数(结果){success=true;document.getElementById(“”)。click();});如果(!success){return false;}否则{success=false;return true;}请欣赏注释,但它并不能解决问题。你的建议会产生一个无休止的循环。