Monday, May 13, 2024
 Popular · Latest · Hot · Upcoming
191
rated 0 times [  192] [ 1]  / answers: 1 / hits: 52654  / 12 Years ago, mon, february 11, 2013, 12:00:00

Ok, I'm sure there's something simple set wrong here but I'm not 100% what it is.



So I am trying to use Select2 AJAX method as a way of users to search a database and select a result. The call itself is coming back with results, however it will not allow me to select the answer from the list. It also doesn't seem to allow you to select it on hover or up/ down arrow. So without further ado, here is my 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
})
})


JSON Response



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


Everything seems to pull in correctly, however I am unable to actually select the answer and have it input into the box. Is there a problem somewhere in my code?


More From » jquery

 Answers
6

After looking at another answer it would seem I need to also pass id field with every call, otherwise it will disable the input.



Sample code that fixed it:



$('.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
})


Edit



Since this keeps getting upvoted I'll elaborate a bit. The .select2() method expects a unique id field on all results. Thankfully, there's a workaround. The id option accepts a function like this:



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


Since my unique identifier was <RESULT>._id, I simply return <RESULT>._id;


[#80286] Sunday, February 10, 2013, 12 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
dylondarrianb

Total Points: 48
Total Questions: 109
Total Answers: 104

Location: Zambia
Member since Thu, Jun 25, 2020
4 Years ago
;