C# OnClientClick并同时单击事件,因为按钮未触发-FireFox中的问题

C# OnClientClick并同时单击事件,因为按钮未触发-FireFox中的问题,c#,asp.net,firefox,code-behind,onclientclick,C#,Asp.net,Firefox,Code Behind,Onclientclick,我将Onclientclick事件附加到服务器端代码中的按钮,如下所示 TopPanelButton.OnClientClick = string.Format("if(!ValidData({0},{1},{2},{3})) return false;", txtOD.ClientID, radCmbOD.ClientID, txtgetMe.ClientID, RadAjaxLoadingPanel1.ClientID); 此外,还会为aspx页面中的同一按钮附加onClick事件 &l

我将Onclientclick事件附加到服务器端代码中的按钮,如下所示

TopPanelButton.OnClientClick = string.Format("if(!ValidData({0},{1},{2},{3})) return false;", txtOD.ClientID, radCmbOD.ClientID, txtgetMe.ClientID, RadAjaxLoadingPanel1.ClientID);
此外,还会为aspx页面中的同一按钮附加onClick事件

 <asp:Button ID="TopPanelButton" runat="server" Text="Go" 
   CssClass="CBtn1" Width="30px" Height="21px" OnClick="TopPanelButton_Click" />
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;
    }

FireFox不同时处理OnClientClick和OnClick事件(尽管Internet Explorer处理得很好)。要解决这个问题,有一个方法
Page.ClientScript.GetPostBackEventReference()
,可以用来生成客户端Javascript,以便对控件进行回发

因此,下面的代码将隐藏页面上除加载图形之外的所有内容,并调用btnSubmit postback方法。 它返回false的原因是,否则InternetExplorer将调用服务器端OnClick方法两次

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

我发现问题并解决了。下面给出了我问题的解决方案

我使用的是telerik控件,在Firefox中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中都能正常工作。

在ValidData()中似乎有一些不正确的地方,IE可能会更宽容一些。您可以发布ValidData()的代码吗?use可以使用
switch(ddlOND.value){}
而不是multiple if elseif
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;
    }