Событие OnClientClick и Click вместе для кнопки не срабатывает - проблема в FireFox - PullRequest
5 голосов
/ 21 февраля 2011

У меня событие 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" />

Событие щелчка на сервере должно срабатывать, если 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;
    }

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

Я нашел проблему и исправил.Ниже приведено решение моей проблемы.

Я использую элементы управления telerik, идентификатор клиента не рассматривается как объект в Firefox.Но IE рассматривает clientID как объект.Так что мой предыдущий код отлично работает в IE, а не в Firefox.Теперь я изменил OnClientClick, передавая 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 для получения объекта.Это прекрасно работает как в IE, так и в Firefox.

0 голосов
/ 21 февраля 2011

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, ""));
...