2012-12-03 123 views
3

我有一個按鈕,看起來像:ASP.NET按鈕,只有當返回的OnClientClick執行的OnClick真

<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');,則會觸發警報。)。

我需要做什麼來強制btnSave_Click只有在Web服務返回true時纔會觸發?

+0

看到這個問題:HTTP://計算器。 com/questions/7610871/how-to-trigger-an-event-after-using-event-prevent默認 – karaxuna

回答

-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; 
} 
+0

btnSave_Click()處理服務器端 – user982119

+0

它不起作用,它會通過返回false,你必須聲明成功SaveChanges函數的範圍 – karaxuna

+0

@ user982119我認爲Yohanes的解決方案几乎沒有問題。只是一個小小的改變。 Scripts.WebServices.WSCommon.SaveChanges(arr1,arr2,arr3,function(result){ success = true; document.getElementById('<%= btnSave.ClientID%>')。click(); }); if(!success) { return false; } else { success = false; 返回true; } – Teddy

0

在你的Web服務調用function是要執行的回調方法在異步調用返回..

但你SaveChanges方法不會等到然後。

我想你周圍的一個方法可以做到這一點,要麼在你的web窗體中有一個隱藏的字段,要麼給你的輸入按鈕添加一個額外的(你自己的)屬性..在回調方法中將它的值設置爲一些有意義的值。在調用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; 
    } 
} 
相關問題