2013-02-13 2 views
1

사용자가 드롭 다운 목록에서 선택한 항목을 기반으로 Ajax Control Toolkit에서 자동 완성 Extender 컨트롤을 동적으로 활성화/비활성화하려고합니다.Ajax Control Toolkit 자동 완성 Extender를 동적으로 해제하십시오.

내 ASP.NET 4.0 Webforms 응용 프로그램에는 드롭 다운 목록이 있으며 선택한 국가에 따라 zipcode 자동 확장 프로그램을 사용하거나 사용하지 않도록 설정해야합니다.

내 마크 업 :이 설정으로

<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" /> 

는 자동 완성 익스텐더에서 차기 및 표시 유효 스위스 된 우편 번호 - 생활은 좋은 :-)

그러나이입니다 : 사용자가 다른 국가를 선택하면, 내가 이 자동 완성 익스텐더를 중지하고 싶습니다 - 나는 내 데이터베이스에 다른 우편 번호를 표시 할 필요가 없으며 프랑스의 스위스 우편 번호 표시는 의미가 없습니다.

그래서 난 그냥 벌금 ZipcodeBehavior를 얻을 수 있습니다 목록

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

     var behavior = $('#ZipcodeBehavior'); 

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

드롭 다운에 change 이벤트를 잡기 위해이 같은 시도 -하지만 일단은 - 아무것도 ...

더 이상 작동 것 같다

어떻게하면 Ajax Control Toolkit의 AutocompleteExtender를 동적으로 비활성화 할 수 있습니까?

는 마크 업에서, 정적, 나는 그것이

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

를 사용하고 아무것도에서 내 모든 페이지에 렌더링되지 도착 할.

답변

1

우선, jQuery 선택기로 MicrosoftAjax 클라이언트 개체를 가져올 수 없습니다. 따라서이 구문 var behavior = $('#ZipcodeBehavior');은 의미가 없습니다. 대신 $find("BehaviorID")을 사용하십시오. Enabled="false"으로,

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

BTW :/당신이 비활성화 월 이후

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); 
}; 

이 코드로 확장 가능 :

는 AutoCompleteExtender에 능력 ScriptManager 컨트롤이 스크립트에 대한 참조를 추가하지 않도록 추가하려면 마크 업에 지정된 속성 클라이언트에서 익스텐더를 사용하지 않는 것이 좋습니다.

+0

+1 자바 매직은 진짜로 블랙 매직과 부두교에 국경을가집니다 .... :-) ** 단서 없음 ** 정확히 당신이 여기서하고있는 것 -하지만 그것은 매력처럼 작동합니다! 감사! –

관련 문제