2013-02-13 75 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