pwavell Ответов: 1

функция javascript не вызывается при нажатии кнопки в первый раз.


У меня есть сетка, в которой есть кнопка выбора для выбора данных строк.При нажатии кнопки select я хочу открыть другую страницу в другой вкладке.
функция JavaScript:=
function opentab() {
            var vrn = document.getElementById("<%=hdnvrno.ClientID%>").value;
            window.open("ABC.aspx?vrno=" + vrn + "", "_blank");
        }

ASPX:=
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
      <ContentTemplate>

&ЛТ;как ASP:HiddenField идентификатор="hdnvrno" атрибут runat="сервер" значение="" /&ГТ;
&ЛТ;АСП:таблицы с ID="gridview1, на" атрибут runat="сервер"и GT;
<столбцы>
<asp:TemplateField>
                                           <ItemTemplate>
                                               <asp:Button ID="btnSelect" runat="server" Text="s" Width="7px" CommandName="Select" CommandArgument='<%# Eval("VAL") %>' />
                                           </ItemTemplate>
                                       </asp:TemplateField>

С ФОНОВЫМ КОДОМ :=
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
      {
          if (e.CommandName == "Select")
          {
             string  VAL= e.CommandArgument.ToString();

Кнопка btnlink = (кнопка)e.CommandSource;
hdnvrno.Значение = Вэл;
btnlink.Атрибуты.Добавить("OnClick", "opentab();");
}
}
когда я во-первых нажимаю на кнопку select, функция js function не вызывается, когда я нажимаю на нее, во-вторых, она вызывается.А в чем проблема, я м не в состоянии понять.
Помогите мне, пожалуйста.

1 Ответов

Рейтинг:
1

Bh@gyesh

Привет,

Когда код "btnlink.Атрибуты.Добавить("щелчку", "вы готовы, ();");" выполнит первый раз, он будет регистрировать clickevent(JavaScript) с нажатием кнопки, поэтому он не вызывается первый раз. Затем в следующий раз, если вы снова нажмете кнопку, зарегистрированное событие будет вызвано так, что во второй раз вы получите вызов для этой функции.

Чтобы преодолеть эту проблему, вам нужно зарегистрировать это событие (например, btnlink.Атрибуты.Добавить("OnClick", "opentab();")) в gridview_load событие. Таким образом, когда сетка загружается в первый раз, событие будет зарегистрировано для нажатия кнопки.

Спроси меня, если у тебя есть какие-то сомнения.

Спасибо,
ЧД@gyesh


pwavell

где и как зарегистрировать это событие?

Bh@gyesh

Добавьте событие RowDataBound в сетку и зарегистрируйте в нем событие buttonclick.

Напр..

защищенный void GridView1_RowDataBound(отправитель объекта, GridViewRowEventArgs e)
{
если (электронная.Подряд.RowType == DataControlRowType.Строкаданных)
{
Button btn = (Button)e.Row.FindControl("btnSelect");
БТН.Атрибуты.Добавить("OnClick", "opentab();");
}
}

и удалите "btnlink.Атрибуты.Добавьте("OnClick", "opentab();");" строку из события RowCommand.

Bh@gyesh

Это работает или нет?

pwavell

нет... все еще не работает...

Bh@gyesh

Я создал приложение, подобное вашему коду, и оно работает..