簡體   English   中英

一起按鈕的OnClientClick和Click事件沒有觸發 - 在FireFox中出現問題

[英]OnClientClick and Click event together for a button is not firing - issue in FireFox

我有Onclientclick事件附加到服務器端代碼中的按鈕,如下所示,

TopPanelButton.OnClientClick = string.Format("if(!ValidData({0},{1},{2},{3})) return false;", txtOD.ClientID, radCmbOD.ClientID, txtgetMe.ClientID, RadAjaxLoadingPanel1.ClientID);

此外,onClick事件附加到aspx頁面中的相同按鈕,

 <asp:Button ID="TopPanelButton" runat="server" Text="Go" 
   CssClass="CBtn1" Width="30px" Height="21px" OnClick="TopPanelButton_Click" />

如果onclientclick返回true,則應觸發服務器端點擊事件。 調用“ValidateData()”函數來驗證表單中的條目。

此代碼在IE中正常工作。 但在Firefox中,這兩個事件並不充實。 如果我評論“TopPanelButton.OnClientClick = ...”代碼,則onClick事件將被觸發。


我在哪里可以在下面的代碼中應用此代碼Page.ClientScript.GetPostBackEventReference()

TopPanelButton.OnClientClick = string.Format("if(!ValidData({0},{1},{2},{3})) return false;", txtOD.ClientID, radCmbOD.ClientID, txtgetMe.ClientID, RadAjaxLoadingPanel1.ClientID);

Firefox沒有調用ValidData函數。 我在javascript中設置了警報,但Firefox中沒有顯示警告消息。 但IE顯示警報消息。

我的validData函數:

function ValidData(txtOND, ddlOND, txtgetMe, aPanel) {
        alert("Entered");
        if (!ValidNumber(txtgetMe)) {
            aPanel.hide();
            return false;
        }

        if (ddlOND.value == "Origin" || ddlOND.value == "Destination") {
            if (!ValidOriginOrDestination(txtOND, ddlOND.value)) {
                aPanel.hide();
                return false;
            }
        }
        else if (ddlOND.value == "O&D") {
            if (!ValidOND(txtOND)) {
                aPanel.hide();
                return false;
            }
        }

        if (ddlOND.value == "Region Starting with" || ddlOND.value == "Country Starting with" || ddlOND.value == "Budget Station Starting with") {
            if (txtOND.value.length == 0) {
                radalert("Enter  a value for " + ddlOND.value);
                aPanel.hide();
                return;
            }
        }
        aPanel.show();
        return true;
    }

我找到了問題並修復了。 給出下面我的問題的解決方案。

我正在使用telerik控件,其中clientID不被視為Firefox中的對象。 但是IE將clientID視為對象。 所以我之前的代碼在IE中運行良好,而不是在Firefox中。 現在我改變了OnClientClick,通過在單個quoute中將clientID作為字符串傳遞如下:

TopPanelButton.OnClientClick = string.Format("javascript:if(!ValidData('{0}','{1}','{2}','{3}')) return false;", txtOD.ClientID, radCmbOD.ClientID, txtgetMe.ClientID, RadAjaxLoadingPanel1.ClientID);

在我的javascript中,我使用document.getElementById來獲取對象。

function ValidData(txtOND, ddlOND, txtgetMe, aPanel) {
        var l_aPanel = document.getElementById(aPanel);
        var l_txtgetMe = document.getElementById(txtgetMe);

        if (!ValidNumber(l_txtgetMe)) {
            return false;
        }

        var l_txtOND = document.getElementById(txtOND);
        var l_ddlOND = document.getElementById(ddlOND);

        if (l_ddlOND.value == "Origin" || l_ddlOND.value == "Destination") {
            if (!ValidOriginOrDestination(l_txtOND, l_ddlOND.value)) {
                return false;
            }
        }
        else if (l_ddlOND.value == "O&D") {
            if (!ValidOND(document.getElementById(txtOND))) {
                return false;
            }
        }

        if (l_ddlOND.value == "Region Starting with" || l_ddlOND.value == "Country Starting with" || l_ddlOND.value == "Budget Station Starting with") {
            if (l_txtOND.value.length == 0) {
                radalert("Enter  a value for " + l_ddlOND.value);
                return false;
            }
        }
        return true;
    }

這在IE和Firefox中都可以正常工作。

FireFox不處理OnClientClick和OnClick事件(盡管Internet Explorer處理得很好)。 為了解決這個問題,我們可以使用一個方法Page.ClientScript.GetPostBackEventReference()來生成客戶端Javascript,以便對控件進行回發。

因此,以下代碼將隱藏除加載圖形之外的頁面上的所有內容,並且還調用btnSubmit回發方法。 它返回false的原因是Internet Explorer會兩次調用服務器端的OnClick方法。

btnSubmit.OnClientClick = String.Format("ElementStyle(document.getElementById('wrapper'),'display','none'); {0}; return false;", Page.ClientScript.GetPostBackEventReference(btnSubmit, ""));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM