2015-02-24 2 views
0

У меня есть сетка, у которой есть столбец переключателей. У меня есть функция javascript, которая позволяет пользователю только щелкнуть по одному переключателю. При первом щелчке по gridview ничего не происходит. Каждый клик после этого отлично работает.Почему первый щелчок на переключателе в gridview ничего не делает?

Обновление: Если я нажму прямо на переключатель, это сработает в первый раз, но если я нажму на строку, я должен щелкнуть дважды.

<script type="text/javascript"> 
    function SelectSingleRadiobutton(rdbtnid) { 
     var rdBtn = document.getElementById(rdbtnid); 
     var rdBtnList = document.getElementsByTagName("rbTypeGroup"); 
     for (i = 0; i < rdBtnList.length; i++) { 
      if (rdBtnList[i].type == "radio" && rdBtnList[i].id != rdBtn.id) { 
       rdBtnList[i].checked = false; 
      } 
     } 
    } 
</script> 



<asp:GridView ShowHeader="false" SkinID="noborder" runat="server" ID="gvType" AutoGenerateColumns="false" 
         OnRowDataBound="gvType_RowDataBound" ClientIdMode="Predictable"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:RadioButton ID="optValue" runat="server" Name="options" Style="cursor: default;" Tag="rbTypeGroup" OnClick="SelectSingleRadiobutton(this.id)"/> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="Name" /> 
     <asp:BoundField DataField="Description" /> 
    </Columns> 
</asp:GridView> 

protected void gvType_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     HibConfig.IncidentType type = (HibConfig.IncidentType)e.Row.DataItem; 

     RadioButton rdo = ((RadioButton)e.Row.FindControl("optValue")); 
     rdo.Checked = incident.Type.Id == type.Id ? true : false; 
     e.Row.Attributes.Add("onclick", string.Format("document.getElementById('{0}').click();", rdo.ClientID)); 
     e.Row.Attributes.Add("dataId", type.Id.ToString()); 
    } 
} 

ответ

0

Вид сетки может загружаться после инициализации JS. Я думаю, что то, что вы видите, находится на начальной загрузке страницы, ваш js не имеет контекста gridview. Первоначальный щелчок строки сетки вызывает обратную передачу, которая затем загружает файл JS. Если вы используете Jquery, вы можете обернуть JS в document.ready() или $function() call. Другим вариантом было бы попытаться загрузить JS в нижней части документа, чтобы попытаться обеспечить, чтобы DOM предоставил. У меня было несколько JS-файлов «break» или «свободный» контекст страницы с элементами asp. Постобработки могут вызвать ряд проблем с JS