奇妙な動作のコンボボックスがあります。
ここに私のマークアップがあります
<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 は Web サービスに関連付けられています。
onItemsRequesting 関数は、必要な追加データ ビットをいくつかコンボ ボックス コンテキストに追加します。
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 イベントをコンボボックスにアタッチします。
//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 は selectedIndexChanged イベントを発生させます。
実際: イベントを発生させずにアイテムが削除されます
興味深いのは、アイテムを削除せずにボックスをクリックしてオフにした場合です。次に、クリックして削除すると、イベントが正しく発生します。
何か案は?