2010-03-09 5 views
1

J'utilise le plugin JQuery autocomplete comme une sorte de sélecteur de jeu de données. Si l'utilisateur choisit une valeur dans la recherche de saisie semi-automatique, la base de données est interrogée pour l'ensemble de données correspondant. Si l'utilisateur tape une nouvelle valeur, l'utilisateur peut entrer un nouveau jeu de données. Un problème se pose lorsque l'utilisateur tape une valeur existante plutôt que de la choisir dans la recherche de saisie semi-automatique. Lorsque cela est fait, la méthode de saisie semi-automatique .result() n'est pas appelée et aucun ensemble de données n'est récupéré. Pour résoudre ce problème, j'ai ajouté un .blur(function(){$(this).search();}); à l'élément d'entrée. Cela a corrigé le problème d'origine.autocomplete: comment éviter une recherche en double?

Maintenant, j'ai le problème que .result() se déclenche sur la sélection de la recherche et sur le flou. Je voudrais .result() tirer sur la sélection de la recherche OU sur le flou. Comment puis-je y arriver?

Voici mon code:

$('#groupset').autocomplete('ajax/php/leeruns.php'); 
$('#groupset').result(
    function(event, data, formatted) { 
     if(data){ 
      $('#groupsetdesc').val(formatted); 
      groups.load(data[1]); //retrieve matching dataset 
     } else { 
      $('#groupsetdesc').val(''); 
     } 
    } 
).blur(function(){$(this).search();}); 

Répondre

1

Vous pouvez stocker la valeur actuelle des données dans une variable persistante appelée précédent et ne se charge pas l'ensemble de données si elle est la même.

var loaded_previous; 
$('#groupset').autocomplete('ajax/php/leeruns.php'); 
$('#groupset').result(
function(event, data, formatted) { 
    if(data && data[1] != loaded_previous){ 
     loaded_previous = data[1]; 
     $('#groupsetdesc').val(formatted); 
     groups.load(data[1]); //retrieve matching dataset 
    } else { 
     $('#groupsetdesc').val(''); 
    } 
} 
).blur(function(){$(this).search();});