- Posts: 227
- Thank you received: 36
Ask the community, share ideas, and connect with other LimeSurvey users!
<script> $(document).ready(function(){ $('button#movesubmitbtn').on('click',function(){ var $otherRow = $('div.array-flexible-row table.subquestions-list tr:has("input:text")'); for(var i=0;i<$otherRow.length;i++){ var checkedRadio = $otherRow.eq(i).find('td:not("td.noanswer-item")').find('input:checked').length; var boxVal = $.trim($otherRow.eq(i).find('input:text').val()); if(((checkedRadio != 0) && (boxVal == "")) || ((checkedRadio == 0) && (boxVal != ""))){ alert('Please review your answer in other specify row.'); return false; } break; } }); //clear other specify value on click of no answer $('td.noanswer-item').on('click',function(){ $(this).parent().find('input:text').val(''); }); //uncheck no answer on keydown inside otherspecify box. $('div.array-flexible-row table.subquestions-list input:text').on('keydown',function(){ $(this).parent().parent().find('td.noanswer-item input:radio').prop('checked',false); }); }); </script>
<script type="text/javascript" charset="utf-8"> $(document).ready(function() { // Identify the questions var thisQuestion = $('#question'+{QID}+''); var nextQuestion = $(thisQuestion).nextAll('.text-short:eq(0)'); // Hide the short-text question $(nextQuestion).hide(); // Move the hidden text input into the array $('th.answertext:last', thisQuestion).append($('input[type="text"]', nextQuestion)).closest('tr').addClass('otherRow'); // Some styling... $('input[type="text"]', thisQuestion).css({ 'width': '50%' }); // Handle the "Other" radios $('input[type="text"]', thisQuestion).on('keyup change',function(event){ event.stopPropagation(); if($.trim($(this).val()) == '') { $('.otherRow input:radio[value!=""]', thisQuestion).prop('checked',false); $('.otherRow input:radio[value=""]', thisQuestion).click(); } else { $('.otherRow input:radio[value=""]', thisQuestion).prop('checked',false); } }); // Handle the "Other" text input $('.otherRow input.radio', thisQuestion).on('click',function(event){ if($(this).attr('value') == '') { $('.otherRow input[type="text"]', thisQuestion).val(''); } }); // Validate the "Other" text input(s) on submit if($('#movenextbtn, #movesubmitbtn').attr('data-inserted-other') != 'true') { // We're only doing this once on this page $('#movenextbtn, #movesubmitbtn').attr('data-inserted-other', 'true').on('click.insertedOther', function (event) { var otherError = 0; $('.array-flexible-row .otherRow').each(function(i) { if(($('input:radio[value!=""]:checked', this).length > 0 && $('input[type="text"]', this).val() == '') || ($('input:radio[value!=""]:checked', this).length == 0 && $('input[type="text"]', this).val() != '')) { otherError = 1; } }); if(otherError == 1) { alert('Please review your answer in the "Other" row(s).'); return false; } }); } }); </script>
You can submit a feature request - www.limesurvey.org/en/community-services/feature-requests .To make it simple, how about make enhancement in limesurvey,
for array question add Option for Other answer like single or multiple question type?
I think you have enough information in this thread to accomplish that.How about array question like attached image.
<script type="text/javascript" charset="utf-8"> $(document).ready(function() { // Identify the questions var thisQuestion = $('#question'+{QID}+''); var nextQuestion1 = $(thisQuestion).nextAll('.text-short:eq(0)'); var nextQuestion2 = $(thisQuestion).nextAll('.text-short:eq(1)'); var nextQuestion3 = $(thisQuestion).nextAll('.text-short:eq(2)'); var nextQuestions = $(nextQuestion1).add(nextQuestion2).add(nextQuestion3); var nextLength = nextQuestions.length; var sqLength = ('tr.answers-list', thisQuestion).length; // Hide the short-text questions $(nextQuestions).hide(); // Move the hidden text inputs into the array for (i = 0; i < nextLength; i++) { var workingIndex = (sqLength - 1) - (nextLength - i); var nextQ = nextQuestions[i]; $('th.answertext:eq('+workingIndex+')', thisQuestion).append($('input[type="text"]', nextQ)).closest('tr').addClass('otherRow'); } // Some styling... $('input[type="text"]', thisQuestion).css({ 'width': '50%' }); // Handle the "Other" radios $('input[type="text"]', thisQuestion).on('keyup change',function(event){ event.stopPropagation(); var thisRow = $(this).closest('tr.answers-list'); if($.trim($(this).val()) == '') { $('input:radio[value!=""]', thisRow).prop('checked',false); $('input:radio[value=""]', thisRow).click(); } else { $('input:radio[value=""]', thisRow).prop('checked',false); } }); // Handle the "Other" text inputs $('.otherRow input.radio', thisQuestion).on('click',function(event){ var thisRow = $(this).closest('tr.answers-list'); if($(this).attr('value') == '') { $('input[type="text"]', thisRow).val(''); } }); // Validate the "Other" text inputs on submit if($('#movenextbtn, #movesubmitbtn').attr('data-inserted-other') != 'true') { // We're only doing this once on this page $('#movenextbtn, #movesubmitbtn').attr('data-inserted-other', 'true').on('click.insertedOther', function (event) { var otherError = 0; $('.array-flexible-row .otherRow').each(function(i) { if(($('input:radio[value!=""]:checked', this).length > 0 && $('input[type="text"]', this).val() == '') || ($('input:radio[value!=""]:checked', this).length == 0 && $('input[type="text"]', this).val() != '')) { otherError = 1; } }); if(otherError == 1) { alert('Please review your answer in the "Other" row(s).'); return false; } }); } }); </script>
<script type="text/javascript" charset="utf-8"> $(document).ready(function() { // Identify the questions var thisQuestion = $('#question'+{QID}+''); var nextQuestion = $(thisQuestion).nextAll('.text-short:eq(0)'); // Hide the short-text question $(nextQuestion).hide(); // Add a class to the "N/A" column $('table.subquestions-list thead tr th:last', thisQuestion).addClass('na-column'); $('table.subquestions-list tbody tr', thisQuestion).each(function(i) { $('td:last', this).addClass('na-column'); }); // Hide the "N/A" column $('.na-column', thisQuestion).hide(); var ansColWidth = Number($('.col-answers', thisQuestion).attr('width').replace(/%/, '')); var newColWidth = (100-ansColWidth)/($('col.odd, col.even', thisQuestion).length-1); $('col.odd, col.even', thisQuestion).attr('width', newColWidth+'%'); // Move the hidden text input into the array $('th.answertext:last', thisQuestion).append($('input[type="text"]', nextQuestion)).closest('tr').addClass('otherRow'); // Initial "N/A" radio setting if($('.otherRow input:radio:checked', thisQuestion).length == 0) { $('.otherRow .na-column input:radio', thisQuestion).trigger('click'); } // Some styling... $('input[type="text"]', thisQuestion).css({ 'width': '50%' }); // Handle the "Other" radios $('input[type="text"]', thisQuestion).on('keyup change',function(event){ event.stopPropagation(); if($.trim($(this).val()) == '') { $('.otherRow input:radio', thisQuestion).prop('checked',false); $('.otherRow .na-column input:radio', thisQuestion).click(); } else { $('.otherRow .na-column input:radio', thisQuestion).prop('checked',false); } }); }); </script>
Was the attachment revoked or is that a problem from the new website (which was introduced today)?tpartner wrote:
<script type="text/javascript" charset="utf-8"> $(document).ready(function() { // Identify the questions var thisQuestion = $('#question'+{QID}+''); var nextQuestion = $(thisQuestion).nextAll('.text-short:eq(0)'); // Hide the short-text question $(nextQuestion).hide(); // Move the "Other" row to the end (in case of randomization) $('table.subquestions-list', thisQuestion).append($('tr.answers-list[id$="X'+{QID}+'99"]')); // Add a class to the "N/A" column $('table.subquestions-list thead tr th:last', thisQuestion).addClass('na-column'); $('table.subquestions-list tbody tr', thisQuestion).each(function(i) { $('td:last', this).addClass('na-column'); }); // Hide the "N/A" column $('.na-column', thisQuestion).hide(); var ansColWidth = Number($('.col-answers', thisQuestion).attr('width').replace(/%/, '')); var newColWidth = (100-ansColWidth)/($('col.odd, col.even', thisQuestion).length-1); $('col.odd, col.even', thisQuestion).attr('width', newColWidth+'%'); // Move the hidden text input into the array $('th.answertext:last', thisQuestion).append($('input[type="text"]', nextQuestion)).closest('tr').addClass('otherRow'); // Initial "N/A" radio setting if($('.otherRow input:radio:checked', thisQuestion).length == 0) { $('.otherRow .na-column input:radio', thisQuestion).trigger('click'); } // Some styling... $('input[type="text"]', thisQuestion).css({ 'width': '50%' }); // Handle the "Other" radios $('input[type="text"]', thisQuestion).on('keyup change',function(event){ event.stopPropagation(); if($.trim($(this).val()) == '') { $('.otherRow input:radio', thisQuestion).prop('checked',false); $('.otherRow .na-column input:radio', thisQuestion).click(); } else { $('.otherRow .na-column input:radio', thisQuestion).prop('checked',false); } }); }); </script>