Difference between revisions of "Replace single questions dropdown by plugin"
(→Code) |
(→Code) |
||
Line 20: | Line 20: | ||
Add this code to Javascript editor in both single or single grid dropdown layout. | Add this code to Javascript editor in both single or single grid dropdown layout. | ||
Question.bind('afterShowQuestion', function(ev, question, $el) { | Question.bind('afterShowQuestion', function(ev, question, $el) { | ||
− | + | $.when( | |
− | $.fn.select2 || $.ajax({ | + | $.fn.select2 || $.ajax({ |
− | type: 'GET', | + | type: 'GET', |
− | dataType: 'script', | + | dataType: 'script', |
− | cache: true, | + | cache: true, |
− | url: 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js' | + | url: 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js' |
− | }), | + | }), |
− | $.fn.select2 || $('<link/>', {rel: 'stylesheet', href: 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css'}).appendTo('head') | + | $.fn.select2 || $('<link/>', {rel: 'stylesheet', href: 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css'}).appendTo('head') |
− | ).done(function() { | + | ).done(function() { |
− | $('select', $el).select2({ | + | $('select', $el).select2({ |
− | minimumResultsForSearch: Infinity, | + | minimumResultsForSearch: Infinity, |
− | width: '100%', | + | width: '100%', |
− | templateResult: function(state) { | + | templateResult: function(state) { |
− | //custom option template in dropdown | + | //custom option template in dropdown |
− | if (!$(state.element).instance()) return null; | + | if (!$(state.element).instance()) return null; |
− | return $('<div/>').html(state.text).css({'text-align': 'left'}); | + | return $('<div/>').html(state.text).css({'text-align': 'left'}); |
− | }, | + | }, |
− | templateSelection: function(state) { | + | templateSelection: function(state) { |
− | //custom selected value | + | //custom selected value |
− | if (!$(state.element).instance()) return question.selectText; | + | if (!$(state.element).instance()) return question.selectText; |
− | return $('<div/>').html(state.text).css({'text-align': 'left'}); | + | return $('<div/>').html(state.text).css({'text-align': 'left'}); |
− | } | + | } |
− | }); | + | }); |
− | $('.select2-selection', $el).css({height: 'auto', 'min-height': '28px'}); | + | $('.select2-selection', $el).css({height: 'auto', 'min-height': '28px'}); |
− | }); | + | }); |
}); | }); |
Revision as of 08:24, 26 October 2022
Contents
Description
When viewed in dropdown layout of both Single and Single grid question. There are 3 problems in this case:
• Some characters on keyboard decode/encode problem. Such as: Ampersand ( & ), single quotation ( ' ), double quotation marks ( " ), is more than ( > ), is less than ( < ).
• Same problem with characters not on keyboard. For example: ÷, ×, ±, ≠, ≡, ≤, ≥, …, ‘, °C and maybe more than that.
• Problem with display HTML format in dropdown list when using it to design UI.
Expectation
These decode/encode problems will be fix and display normally like other question type and layout.
Example
After:
File:After-replace.PNG
Solution
Replace select dropdown default by plugin 'select2'.
URL: https://select2.org/
Code
Add this code to Javascript editor in both single or single grid dropdown layout.
Question.bind('afterShowQuestion', function(ev, question, $el) { $.when( $.fn.select2 || $.ajax({ type: 'GET', dataType: 'script', cache: true, url: 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js' }), $.fn.select2 || $('<link/>', {rel: 'stylesheet', href: 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css'}).appendTo('head') ).done(function() { $('select', $el).select2({ minimumResultsForSearch: Infinity, width: '100%', templateResult: function(state) { //custom option template in dropdown if (!$(state.element).instance()) return null; return $('<div/>').html(state.text).css({'text-align': 'left'}); }, templateSelection: function(state) { //custom selected value if (!$(state.element).instance()) return question.selectText; return $('<div/>').html(state.text).css({'text-align': 'left'}); } }); $('.select2-selection', $el).css({height: 'auto', 'min-height': '28px'}); }); });