73 votes

Méthode Select2 Ajax non sélectionnée

Ok, je suis sûr qu'il ya quelque chose de simple mal réglé d'ici, mais je ne suis pas à 100% ce que c'est.

Donc, je suis en train d'utiliser Select2 AJAX méthode comme un moyen d'utilisateurs à la recherche d'une base de données et sélectionnez un résultat. L'appel lui-même est de retour avec les résultats, mais il ne me permet pas de sélectionner la réponse de la liste. Il ne semble pas non plus pour vous permettre de "sélectionner" sur passez la souris ou les flèches haut/ bas. Donc, sans plus tarder, voici mon code:

index.html

<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
        <link rel="stylesheet" type="text/css" href="select2/select2.css" media="screen" />
        <script src="select2/select2.js"></script>
        <script src="select.js"></script>
    </head>
    <body>
        <input type="text" style="width: 500px" class="select2">
    </body>
</html>

select.js

jQuery(function() {

  var formatSelection = function(bond) {
    console.log(bond)
    return bond.name
  }

  var formatResult = function(bond) {
    return '<div class="select2-user-result">' + bond.name + '</div>'
  }

  var initSelection = function(elem, cb) {
    console.log(elem)
    return elem
  }

    $('.select2').select2({
      placeholder: "Policy Name",
      minimumInputLength: 3,
      multiple: false,
      quietMillis: 100,
      ajax: {
        url: "http://localhost:3000/search",
        dataType: 'json',
        type: 'POST',
        data: function(term, page) {
          return {
            search: term,
            page: page || 1
          }
        },
        results: function(bond, page) {
          return {results: bond.results, more: (bond.results && bond.results.length == 10 ? true: false)}
        }
      },
      formatResult: formatResult,
      formatSelection: formatSelection,
      initSelection: initSelection
    })
})

Réponse JSON

{
  error: null,
  results: [
    {
      name: 'Some Name',
      _id: 'Some Id'
    },
    {
      name: 'Some Name',
      _id: 'Some Id'
    }
  ]
}

Tout semble tirer correctement, cependant je n'arrive pas à sélectionner la réponse et de l'avoir saisie dans la boîte. Est-il un problème quelque part dans mon code?

140voto

Dropped.on.Caprica Points 2385

Après avoir regardé une autre réponse , il semblerait j'ai besoin de transmettre aussi l'id de domaine avec chaque appel, sinon il faudra désactiver l'entrée.

Exemple de code qui fixe:

$('.select2').select2({
  placeholder: "Policy Name",
  minimumInputLength: 3,
  multiple: false,
  quietMillis: 100,
  id: function(bond){ return bond._id; },
  ajax: {
    url: "http://localhost:3000/search",
    dataType: 'json',
    type: 'POST',
    data: function(term, page) {
      return {
        search: term,
        page: page || 1
      }
    },
    results: function(bond, page) {
      return {results: bond.results, more: (bond.results && bond.results.length == 10 ? true: false)}
    }
  },
  formatResult: formatResult,
  formatSelection: formatSelection,
  initSelection: initSelection
})

Modifier

Depuis ce ne cesse de upvoted je vais développer un peu. L' .select2() méthode attend un unique id champ sur tous les résultats. Heureusement, il existe une solution de contournement. L' id option accepte une fonction comme ceci:

function( <INDIVIDUAL_RESULT> ) {
  // Expects you to return a unique identifier.
  // Ideally this should be from the results of the $.ajax() call. 
}

Depuis mon identifiant unique <RESULT>._id, j'ai simplement return <RESULT>._id;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X