2011-06-23 2 views
0

J'ai configuré une saisie semi-automatique jquery qui modifie la source de données en fonction de l'entrée dans la zone de texte. Après la source de données sur les changements jquery, il ne se déclenche pas jusqu'à ce que appuyez sur la flèche vers le haut ou vers le bas. J'ai utilisé firebug pour vérifier la source de données et je ne trouve rien de mal à cela. Est-ce que quelqu'un peut me montrer comment envoyer une flèche vers le haut ou vers le bas à un contrôle ou résoudre ce problème de toute autre manière?jquery autocomplete modification de la source de données

Merci beaucoup!

modifier: Je l'ai remplacé par ce qui suit comme JSON, mais il semble que la demande vient erreur message d'alerte

jQuery(function() { jQuery("input#autocomplete").autocomplete({ contentType: 'application/json; charset=utf-8', dataType: 'json', mustMatch: false, limit: 10, minChars: 2,

  select: function (event, ui) { 
       AutoCompleteSelectHandler(event, ui) 
      } 
      , 
      source: function (request, response) { 
       jQuery.ajax({ 
        url: "http://localhost/integration/webservices/PostcodeJSON.asmx/GetPostCodeListJSONfromSuburb", 
        data: {}, 
        dataType: "json", 
        type: "POST", 
        contentType: "application/json; charset=utf-8", 
        dataFilter: function (data) { return data; }, 
        success: function (data) { 
         alert(data); 
        }, 
        error: function (XMLHttpRequest, textStatus, 

errorThrown) { alert(textStatus); } }); } });

}); 

il y a cette case d'entrée html.

Qu'ai-je fait de mal ici? J'ai confirmé que le service Web fonctionne correctement.

Edit2: J'ai apporté des modifications telles que:

jQuery(function() { jQuery("input#autocomplete").autocomplete({

  minChars: 2, 

      select: function (event, ui) { 
       AutoCompleteSelectHandler(event, ui) 
      } 
      , 
      source: function (request, response) { 
       jQuery.ajax({ 
        url: "http://localhost/integration/webservices/PostcodeJSON.asmx/GetPostCodeListJSONfromSuburb", 
        data: '{ Suburb: "' + 

jQuery("#autocomplete").val() + '" }', dataType: "json", type: "POST", contentType: "application/json; charset=utf-8", dataFilter: function (data) { return data.d; }, success: function (data) { alert(data.d); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(textStatus); } }); } });

}); 

si l'alerte fonctionne bien. Mais jquery ne montre pas la liste correspondante. Comment puis-je faire cela?

EDIT 2:

J'ai réussi à travailler sur la question avec webservice. Comment définir la réponse pour que la saisie semi-automatique affiche la liste en conséquence? À l'heure actuelle, chaque élément de la liste me montre la liste complète des éléments. Ie) si je tape 'ab' et s'il y a 3 choses qui correspondent, alors il me montrera le même résultat 3 fois sur 3 lignes différentes.

J'ai la configuration jquery comme ce qui suit:.

jQuery (function() { jQuery ("entrée # autocomplete") saisie semi-automatique ({

  minChars: 2, 

      select: function (event, ui) { 
       AutoCompleteSelectHandler(event, ui) 
      } 
      , 
      source: function (request, response) { 
       jQuery.ajax({ 
        url: "http://localhost/integration/webservices/PostcodeJSON.asmx/GetPostCodeListJSONfromSuburb", 
        data: '{ Suburb: "' + jQuery("#autocomplete").val() + '" }', 
        dataType: "json", 
        type: "POST", 
        contentType: "application/json; charset=utf-8", 
        dataFilter: function (data) { return data; }, 
        success: function (data) { 

                response($.map(data.d, function (item) { 
                 return { 
                  value: data.d 
                 } 
                       })) 


        }, 
        error: function (XMLHttpRequest, textStatus, errorThrown) { 
         alert(textStatus); 
        } 
       }); 
      } 
     }); 

Toute aide sera très appréciée,

+0

Votre description fait peu à aucun sens (pour moi). Par exemple, 'Après source de données sur la jquery change, il ne se déclenche que lorsque vous appuyez sur la flèche vers le haut ou vers le bas. »Qu'est-ce que' datasource on jquery'? Qu'est-ce qui provoque le changement? Qu'est-ce que 'it' qui ne déclenche pas? impossible d'aider quelqu'un qui dit "J'utilise la saisie semi-automatique mais ça ne marche pas, aidez-moi s'il vous plaît". – davin

+0

J'utilise request sur xmlhttpobject pour obtenir la liste d'une page, donc la source de données est juste un tableau de chaînes. Si je change la source de données, la liste de saisie semi-automatique ne s'affiche pas. Cependant, lorsque j'appuie sur la flèche haut ou bas, la liste apparaît. Peut-être que je devrais essayer d'utiliser json avec une source de données personnalisée. – rlee923

+0

Toujours pas clair et certainement pas reproductible. Si vous configurez un http://jsfiddle.net cela rendra la vie de tout le monde beaucoup plus facile et augmentera les chances de résoudre votre problème – davin

Répondre

0

Je l'ai réussi mais une chose dont je ne suis pas sûr est que l'élément devient juste un tableau de chaînes plutôt qu'un objet JSON J'ai essayé d'analyser chaque élément comme un JSON mais ne semble pas travail

Voici la jquery json de travail avec les combinaisons de jquery webservice.

jQuery (function() { jQuery ("entrée # autocomplete"). Autocomplete ({

  minChars: 2, 

      select: function (event, ui) { 
       AutoCompleteSelectHandler(event, ui) 
      } 
      , 
      source: function (request, response) { 
       jQuery.ajax({ 
        url: "http://localhost/integration/webservices/PostcodeJSON.asmx/GetPostCodeListJSONfromSuburb", 
        data: '{ Suburb: "' + jQuery("#autocomplete").val() + '" }', 
        dataType: "json", 
        type: "POST", 
        minChars: 2, 
        contentType: "application/json; charset=utf-8", 
        dataFilter: function (data) { return data; }, 
        success: function (data) { 
         var obj = jQuery.parseJSON(data.d); 
         response($.map(obj, function (item) { 
          var item_obj = jQuery.parseJSON(item); 
          return { 
           value: item[1] 


          } 
         })) 


        }, 
        //      parse: function (data) { 
        //       var parsed = []; 
        //       data = data.d; 

        //       for (var i = 0; i < data.length; i++) { 
        //        parsed[parsed.length] = { 
        //         data: data[i], 
        //         value: data[i].value, 
        //         result: data[i].value 
        //        }; 
        //       } 

        //       return parsed; 
        //      }, 
        //      formatItem: function (item) { 
        //       return item.value; 
        //      }, 
        error: function (XMLHttpRequest, textStatus, errorThrown) { 
         alert(textStatus); 
        } 
       }); 
      } 
     }); 



    }); 
Questions connexes