2

J'ai un contrôle AjaxControlToolkit.AutoCompleteExtender attaché à une zone de texte, et trois boutons radio. Lorsque l'utilisateur sélectionne un bouton radio, la méthode de service utilisé pour récupérer les valeurs indiquées dans le AutoCompleteExtender est modifié comme suit:Forcez la liste déroulante AutoCompleteExtender pour la réafficher via Javascript

$("#radioButtonList input").click(function() { 

    var selectedValue = $(this).val(); 

    if (selectedValue == 0) { 
     $find('autoCompleteExtender').set_serviceMethod('AutoCompleteExtenderMethod1'); 
    } 
    else if (selectedValue == 1) { 
     $find('autoCompleteExtender').set_serviceMethod('AutoCompleteExtenderMethod2'); 
    } 
    else if (selectedValue == 2) { 
     $find('autoCompleteExtender').set_serviceMethod('AutoCompleteExtenderMethod3'); 
    } 

    $('#textbox').focus(); 
} 

Je veux faire en sorte que, si l'utilisateur sélectionne un bouton radio lorsque le texte est déjà présent dans la zone de texte, la liste des valeurs de saisie semi-automatique basée sur la nouvelle méthode de service est affichée (comme si l'utilisateur cliquait sur le bouton radio et puis tapé dans la zone de texte).

J'ai essayé différents mécanismes de mise à feu des événements, comme ceci:

var press = jQuery.Event("keypress"); 
press.ctrlKey = false; 
press.which = 77; 
$('#textbox').trigger(press); 

... chacun d'entre eux ...

$('#textbox').keydown(); 
$('#textbox').keypress(); 
$('#textbox').keyup(); 

et même:

$('#textbox').get(0).value += 'm'; 

mais rien ne semble forcer les bons événements à se déclencher pour que la liste de saisie semi-automatique s'affiche de nouveau avec les résultats du nouveau service ré. Comment puis-je y arriver en utilisant Javascript?

EDIT: Je dois faire remarquer: les événements jQuery sont tirer correctement dans chacun des cas ci-dessus, ils sont tout simplement pas la cause liste de saisie semi-automatique à réapparaître quand ils le font. Je suppose que je n'ai pas encore trouvé la bonne combinaison d'événements que l'autocompleteextender s'attend à forcer la liste à apparaître.

Répondre

2

Assurez-vous de lier vos événements dans la fonction $ (document) .ready(). Ce qui suit fonctionne correctement

 <html> 
     <head> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"> 
      </script> 
      <script> 
      $(document).ready(function(){ 
    $("#radioButtonList input").change(function() { 

     var selectedValue = $(this).val(); 

     if (selectedValue == 0) { 
      $find('autoCompleteExtender').set_serviceMethod('AutoCompleteExtenderMethod1'); 

     } 
     else if (selectedValue == 1) { 
      $find('autoCompleteExtender').set_serviceMethod('AutoCompleteExtenderMethod2'); 

     } 
     else if (selectedValue == 2) { 
      $find('autoCompleteExtender').set_serviceMethod('AutoCompleteExtenderMethod3'); 

     } 
//force click on text box 
    $('#textbox').click() 
     $('#textbox').focus(); 
    }); 
//handle click event 
    $("#textbox").click(function(){ 
    alert("textbox clicked") 
    //handle your refresh action for the textbox here 
    }) 
    }) 

    </script> 
    </head> 
    <body> 
    <input id="textbox" type="text" value="test"> 
    <div id="radioButtonList"> 
    <input type="radio" value="0"> 
    <input type="radio" value="1"> 
    <input type="radio" value="2"> 
    </div> 
    </body> 
    </html> 
+0

Absolument vrai, et quelque chose que je faisais déjà - désolé, j'aurais dû être plus clair. Les événements jQuery se déclenchent correctement dans chacun des cas ci-dessus, ils ne provoquent simplement pas la réapparition de la liste de saisie semi-automatique. Je n'ai pas trouvé la bonne combinaison d'événements que l'autocompleteextender s'attend à forcer la liste à apparaître encore. Éditera en conséquence. – Bambi

+0

Essayez d'exécuter showPopup() sur votre objet de saisie semi-automatique, par ex. YourAutoCompleteObject.showPopup() ou $ find ('autoCompleteExtender'). ShowPopup dans le gestionnaire de clic pour la zone de texte. – Michal

+1

Ahhhhh, c'est fait. Ce n'était pas vraiment showPopup() qui l'a fait, mais une enquête plus approfondie dans cette zone m'a conduit à _onTimerTick(), qui ne recevait pas d'appel après que les boutons radio aient été cliqués. Merci! – Bambi

Questions connexes