2013-02-13 107 views
1

我試圖動態地啓用/禁用從Ajax控件工具包基礎上選擇一個用戶在一個下拉列表中選擇自動完成擴展控制。動態關閉Ajax控件工具包自動完成擴展

我的ASP.NET 4.0 Web表單應用程序有一個下拉列表,取決於哪個國家是從它選中,郵編autoextender應啓用或禁用。

我的標記:

<asp:DropDownList runat="server" ID="ddlCountries"> 
    <Items> 
      <asp:ListItem Text="Switzerland" Value="CH" /> 
      <asp:ListItem Text="Germany" Value="D" /> 
      <asp:ListItem Text="Italy" Value="I" /> 
      <asp:ListItem Text="France" Value="F" /> 
    </Items> 
</asp:DropDownList> 
<br /> 

<asp:TextBox runat="server" ID="tbxZipcode" /> 

<asp:AutoCompleteExtender 
    runat="server" ID="acZipcode" BehaviorID="ZipcodeBehavior" 
    ServiceMethod="GetZipCode" 
    TargetControlID="tbxZipCode" MinimumPrefixLength="1" CompletionInterval="15" 
    OnClientItemSelected="PopulateTextboxes" CompletionSetCount="25" /> 

採用這種設置,在自動完成擴展踢,並顯示有效的瑞士拉鍊碼 - 生活是美好的:-)

無論其:如果用戶選擇了另一個國家,我想停止這個自動完成擴展器 - 我沒有其他的拉鍊碼在我的數據庫顯示,併爲法國瑞士顯示郵編是沒有意義的。

所以,我想是這樣的搶在下拉列表

$(document).ready(function() { 
    $('#<%= ddlCountries.ClientID %>').change(function() { 
     var chosenCountry = $(this).val(); 

     var behavior = $('#ZipcodeBehavior'); 

     if (chosenCountry == "CH") { 
     behavior.disabled = ''; 
     } else { 
     behavior.disabled = 'disabled'; 
     } 
    }); 
}); 

change事件,我可以得到ZipcodeBehavior就好了 - 但一旦我有它 - 似乎沒有任何工作了......

如何動態地禁用Ajax控件工具包的AutocompleteExtender?

在標記,靜態的,我把它用

<asp:AutoCompleteExtender Enabled="False" .... /> 

,然後什麼都沒有獲取呈現在我的網頁做。

回答

1

首先,在所有的,你不能讓MicrosoftAjax通過jQuery選擇客戶對象。所以這個語法var behavior = $('#ZipcodeBehavior');沒有意義。改爲使用$find("BehaviorID")

要添加禁用能力AutoCompleteExtender這個腳本添加引用ScriptManager控制:

Sys.Extended.UI.AutoCompleteBehavior.prototype.set_enabled = function (value) { 
    try { 
     $removeHandler(this.get_element(), "keydown", this._keyDownHandler); 
    } catch (error) {} //just escape error if handler already removed 
    this._timer.set_enabled(!! value); 
    if (value) { 
     this._keyDownHandler = Function.createDelegate(this, this._onKeyDown); 
    } else { 
     this._keyDownHandler = Function.createDelegate(this, function() {}); 
    } 
    $addHandler(this.get_element(), "keydown", this._keyDownHandler); 
}; 

後可能要禁用/使用此代碼啓用擴展:

$('#<%= ddlCountries.ClientID %>').change(function() { 
    var chosenCountry = $(this).val(); 
    $find("ZipcodeBehavior").set_enabled(chosenCountry == "CH"); 
}); 

BTW,與Enabled="false"在標記中指定的屬性恐怕你不應該在客戶端啓用擴展。

+0

+1的Javascript確實接壤黑魔法和巫術.... :-)我**不知道**究竟你在這裏做 - 但它就像一個魅力!謝謝! – 2013-02-13 12:12:33