2013-07-02 2 views
0

У меня странное поведение comboBox.RadComboBox ClientSelectedIndexChanged не работает

Вот мой разметки

<telerik:RadComboBox 
       runat="server" 
       id="rcbSite" 
       width="210px" 
       enableloadondemand="true" 
       onclientitemsrequesting="rcbSite_OnClientItemsRequesting" 
       showmoreresultsbox="True" 
       enablevirtualscrolling="True" >  
      <WebServiceSettings Method="GetSitesComboBoxDataByCustomerId" Path="/Services/ClientSideDataService.asmx" /> 
      </telerik:RadComboBox> 

Довольно разумно, COMBOBOX привязан к веб-сервиса.

Функция onItemsRequesting добавляет дополнительные бит данных в контекст comboBox, который нам нужен.

function rcbSite_OnClientItemsRequesting(sender, eventArgs) { 
     //Get the selected customer 
     var selectedCustomerId = $('#<%= CustomerDropDownId %> option:selected').attr('value'); 

     var context = eventArgs.get_context(); 

     //Set filter text 
     context["FilterString"] = eventArgs.get_text(); 
     context["CustomerId"] = selectedCustomerId; 
    } 

В моем коде я создаю и выбираю элемент, если он был ранее выбран.

if (siteId.HasValue) 
{ 
    rcbSite.Items.Add(SiteManager.GetComboBoxItemBySiteId(siteId.Value)); 
    rcbSite.SelectedValue = siteId.Value.ToString(); 
} 

И, наконец, на document.ready я придаю событие selctedIndexChanged к COMBOBOX

//Site Changed 
Sys.Application.add_load(function(){ 

    //If the combo box has items in it, select the first one 
    //Selecting first item client side ensures that address fields are refreshed when binding individual item to combo box on initial page load 
    var combo = $find("<%= rcbSite.ClientID %>"); 
    if (combo.get_items().getItem(0)) { 
     combo.trackChanges(); 
     combo.get_items().getItem(0).select(); 
     combo.commitChanges(); 
    } 

    $find("<%= rcbSite.ClientID %>").add_selectedIndexChanged(
    function (sender, eventArgs) { 
     var item = eventArgs.get_item(); 

     var addressFormFields = new InventoryAddressFields("<%= ddlAddressType.ClientID %>", "<%= txtAttenTo.ClientID %>", "<%= txtAddress1.ClientID %>", 
                 "<%= txtAddress2.ClientID %>", "<%= txtCity.ClientID %>", "<%= ddlCountry.ClientID %>", 
                "<%= ddlState.ClientID %>", "<%= ddlCounty.ClientID %>", "<%= txtPostalCode.ClientID %>", 
                "<%= txtPostalCodePlus4.ClientID %>", "<%= txtPhone.ClientID %>", "<%= txtFax.ClientID %>", 
                "<%= ddlTimezone.ClientID %>", "<%= chkObserveDST.ClientID %>", "<%= ddlVerificationStatus.ClientID %>"); 

     if (item) { 
      var selectedSiteId = item.get_value(); 

      GetAddressBySiteId(addressFormFields, selectedSiteId); 
     } 
     else 
     { 
      clearAddressFields(addressFormFields); 
     } 
} 
); 
}); 

Вот мой вопрос:

  1. Страница нагрузки с одного элемента, вставленные в COMBOBOX & выбран
  2. Щелкните по comboBox & hit backspace
  3. Нажмите от выпадающего списка

Ожидаемый: ComboBox запускает событие SelectedIndexChanged, так как мы теперь ни один элемент не выбран

Фактических: Пункта удаляются без стрельбы события

Что интересно, если вы щелкните в поле и выключите его, не удаляя элемент. Затем щелкните и удалите его, событие срабатывает правильно.

Любые идеи?

ответ

0

У меня есть обходное решение на месте сейчас, похоже, что я хотел, это неподдерживаемое поведение comboBox.

Смежные вопросы