一起按钮的OnClientClick和Click事件没有触发 - 在FireFox中出现问题

rab*_*eek 5 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);
Run Code Online (Sandbox Code Playgroud)

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

 <asp:Button ID="TopPanelButton" runat="server" Text="Go" 
   CssClass="CBtn1" Width="30px" Height="21px" OnClick="TopPanelButton_Click" />
Run Code Online (Sandbox Code Playgroud)

如果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);
Run Code Online (Sandbox Code Playgroud)

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;
    }
Run Code Online (Sandbox Code Playgroud)

Min*_*liz 0

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, ""));
Run Code Online (Sandbox Code Playgroud)