Adding textbox in basic array

More
1 month 1 week ago #167251 by RitaShen
RitaShen replied the topic: Adding textbox in basic array
is the question type are the same as array and multiple short text?

Please Log in or Create an account to join the conversation.

More
1 month 1 week ago #167253 by Joffm
Joffm replied the topic: Adding textbox in basic array
The question type is array(text)
The following user(s) said Thank You: RitaShen

Please Log in or Create an account to join the conversation.

More
1 month 1 week ago #167254 by RitaShen
RitaShen replied the topic: Adding textbox in basic array
I appreciate your kind assistance

Please Log in or Create an account to join the conversation.

More
1 month 1 week ago - 1 month 1 week ago #167283 by tpartner
tpartner replied the topic: Adding textbox in basic array

Can you please help with two other variations of such a question, but when the "Other" textboxes are located horizontally?

Can you attach a small sample survey?

Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Last Edit: 1 month 1 week ago by tpartner.

Please Log in or Create an account to join the conversation.

More
1 month 2 days ago #167535 by krosser
krosser replied the topic: Adding textbox in basic array

tpartner wrote: For array-numbers-checkboxes...

Place a multiple-short-text question directly after the array. This question should have exactly the same sub-questions as the array y-scale.

Give the array question a CSS class "with-checkbox-array-comments".

Add this to custom.js:

$(document).on('ready pjax:scriptcomplete',function(){
	// Apply the plugin to specific arrays
	$('.array-multi-flexi.with-checkbox-array-comments').cbArrayComments();
});
 
// A jQuery plugin insert comments into checkbox arrays
(function( $ ){
 
	$.fn.cbArrayComments = function(options) {  
 
		var opts = $.extend( {
		}, options);
 
		return this.each(function() { 
 
			// Identify the questions
			var thisQuestion = $(this);
			var q1ID = $(thisQuestion).attr('id').replace(/question/, '');
			var thisQuestion = $('#question'+q1ID);
			var nextQuestion = thisQuestion.nextAll('.multiple-short-txt:eq(0)');
			var q2ID = $(nextQuestion).attr('id').replace(/question/, '');
 
			//Hide the multiple-short-text
			nextQuestion.hide();
 
			// Move the text inputs
			$('tr.subquestion-list', thisQuestion).each(function(i) {
				var thisCode = $(this).attr('id').split('X')[2].split(q1ID)[1];
				$('td.answer-item:last input[type="checkbox"]', this).css({
					'position': 'absolute',
					'left': '-9999em'
				});
				$('td.answer-item:last', this).removeClass('checkbox-item').addClass('inserted-text-item').append($('input[type="text"][id$="X'+q2ID+thisCode+'"]', nextQuestion));
			});
 
			// Listeners on the text inputs
			$('input[type="text"]', thisQuestion).on('keyup change', function(e) {
				var thisCheckbox = $(this).closest('td').find('input[type="checkbox"]');
				if($.trim($(this).val()) != '') {
					$(thisCheckbox).prop('checked', true);
					$(thisCheckbox).prev('input:hidden').val(1);
				}
				else {
					$(thisCheckbox).prop('checked', false);
					$(thisCheckbox).prev('input:hidden').val('');
				}
				// Fire Expression Manager
				$(thisCheckbox).trigger('change');
			});
		});
 
	};
})( jQuery );



Hi Tony! Is it possible to modify the code so that when you type in a textbox it excludes all others? (like it is in this workaround )
Many thanks!

I'm using the latest LS 3.7 hosted by LS team, not installed locally.

Please Log in or Create an account to join the conversation.

More
3 weeks 5 days ago - 3 weeks 5 days ago #167878 by krosser
krosser replied the topic: Adding textbox in basic array
Hey guys,

I need to make this kind of question - array(numbers) with multiple choice and text boxes for Others.



Well, in theory, it's similar to what Tony wrote earlier (when text boxes were in the last column), but I can't figure out what should be changed to move them to the other column.
I would like to make this type of question so that "Don't know" is at the end and when clicked it cancels the first choices. So, I wonder if two JS scripts can be run at the same time or there must be one that combines the two workarounds? Because the code for the last column that cancels the previous ones exists .

I'd appreciate if someone could help.

BTW I use LS 3.7

I'm using the latest LS 3.7 hosted by LS team, not installed locally.
Attachments:
Last Edit: 3 weeks 5 days ago by krosser.

Please Log in or Create an account to join the conversation.

More
3 weeks 2 days ago - 3 weeks 2 days ago #168005 by horsti2010
horsti2010 replied the topic: Adding textbox in basic array
EDIT: Sorry had poasted a question how to add Text boxes to a dropdown-array. But I found a solution "the other way round" that you posted in this thread . Nevermind.
Last Edit: 3 weeks 2 days ago by horsti2010.

Please Log in or Create an account to join the conversation.

More
2 weeks 6 days ago - 2 weeks 3 days ago #168088 by tpartner
tpartner replied the topic: Adding textbox in basic array

Well, in theory, it's similar to what Tony wrote earlier (when text boxes were in the last column), but I can't figure out what should be changed to move them to the other column.

To place the text inputs in specific columns...

1) Place this in your theme custom.js file:

// A jQuery plugin to insert comments into a specified column of a checkbox array
(function( $ ){
 
	$.fn.cbArrayComments2 = function(options) {  
 
		var opts = $.extend( {
			column: -1 // Text Input column (-1 will default to last column) 
		}, options);
 
		return this.each(function() { 
 
			// Identify the questions
			var thisQuestion = $(this);
			var q1ID = $(thisQuestion).attr('id').replace(/question/, '');
			var thisQuestion = $('#question'+q1ID);
			var nextQuestion = thisQuestion.nextAll('.multiple-short-txt:eq(0)');
			var q2ID = $(nextQuestion).attr('id').replace(/question/, '');
 
			//Hide the multiple-short-text
			nextQuestion.hide();
 
			// Move the text inputs
			var column = $('tr.subquestion-list:eq(0) td.answer-item', thisQuestion).length;
			if(opts.column > 0) {
				column = opts.column;
			}
 
			$('tr.subquestion-list', thisQuestion).each(function(i) {
				var thisCode = $(this).attr('id').split('X')[2].split(q1ID)[1];
				$('td.answer-item:eq('+(column-1)+') input[type="checkbox"]', this).css({
					'position': 'absolute',
					'left': '-9999em'
				});
				$('td.answer-item:eq('+(column-1)+')', this).removeClass('checkbox-item').addClass('inserted-text-item').append($('input[type="text"][id$="X'+q2ID+thisCode+'"]', nextQuestion));
			});
 
			// Listeners on the text inputs
			$('input[type="text"]', thisQuestion).on('keyup change', function(e) {
				var thisCheckbox = $(this).closest('td').find('input[type="checkbox"]');
				if($.trim($(this).val()) != '') {
					$(thisCheckbox).prop('checked', true);
					$(thisCheckbox).prev('input:hidden').val(1);
				}
				else {
					$(thisCheckbox).prop('checked', false);
					$(thisCheckbox).prev('input:hidden').val('');
				}
				// Fire Expression Manager
				$(thisCheckbox).trigger('change');
			});
		});
 
	};
})( jQuery );


2) Place something like this in the source of the question (in this case, the comments will be in column 3):

<script type="text/javascript" charset="utf-8">
	$(document).on('ready pjax:scriptcomplete',function(){
		$('#question{QID}').cbArrayComments2({
			column: 3 // Text Input column (-1 will default to last column)
		});
	});
</script>

Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Last Edit: 2 weeks 3 days ago by tpartner.
The following user(s) said Thank You: krosser

Please Log in or Create an account to join the conversation.

More
2 weeks 6 days ago #168090 by tpartner
tpartner replied the topic: Adding textbox in basic array

I would like to make this type of question so that "Don't know" is at the end and when clicked it cancels the first choices.

See this post - www.limesurvey.org/forum/can-i-do-this-w...hers?start=15#168089

Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.

Please Log in or Create an account to join the conversation.

More
2 weeks 5 days ago #168202 by krosser
krosser replied the topic: Adding textbox in basic array

tpartner wrote:

Well, in theory, it's similar to what Tony wrote earlier (when text boxes were in the last column), but I can't figure out what should be changed to move them to the other column.

To place the text inputs in specific columns...

1) Place this in your theme custom.js file:

// A jQuery plugin to insert comments into a specified column of a checkbox array
(function( $ ){
 
	$.fn.cbArrayComments2 = function(options) {  
 
		var opts = $.extend( {
			column: -1 // Text Input column (-1 will default to last column) 
		}, options);
 
		return this.each(function() { 
 
			// Identify the questions
			var thisQuestion = $(this);
			var q1ID = $(thisQuestion).attr('id').replace(/question/, '');
			var thisQuestion = $('#question'+q1ID);
			var nextQuestion = thisQuestion.nextAll('.multiple-short-txt');
			var q2ID = $(nextQuestion).attr('id').replace(/question/, '');
 
			//Hide the multiple-short-text
			nextQuestion.hide();
 
			// Move the text inputs
			var column = $('tr.subquestion-list:eq(0) td.answer-item', thisQuestion).length;
			if(opts.column > 0) {
				column = opts.column;
			}
 
			$('tr.subquestion-list', thisQuestion).each(function(i) {
				var thisCode = $(this).attr('id').split('X')[2].split(q1ID)[1];
				$('td.answer-item:eq('+(column-1)+') input[type="checkbox"]', this).css({
					'position': 'absolute',
					'left': '-9999em'
				});
				$('td.answer-item:eq('+(column-1)+')', this).removeClass('checkbox-item').addClass('inserted-text-item').append($('input[type="text"][id$="X'+q2ID+thisCode+'"]', nextQuestion));
			});
 
			// Listeners on the text inputs
			$('input[type="text"]', thisQuestion).on('keyup change', function(e) {
				var thisCheckbox = $(this).closest('td').find('input[type="checkbox"]');
				if($.trim($(this).val()) != '') {
					$(thisCheckbox).prop('checked', true);
					$(thisCheckbox).prev('input:hidden').val(1);
				}
				else {
					$(thisCheckbox).prop('checked', false);
					$(thisCheckbox).prev('input:hidden').val('');
				}
				// Fire Expression Manager
				$(thisCheckbox).trigger('change');
			});
		});
 
	};
})( jQuery );


2) Place something like this in the source of the question (in this case, the comments will be in column 3):

<script type="text/javascript" charset="utf-8">
	[code type=javascript]<script type="text/javascript" charset="utf-8">
	$(document).on('ready pjax:scriptcomplete',function(){
		$('#question{QID}').cbArrayComments2({
			column: 3 // Text Input column (-1 will default to last column)
		});
	});
</script>



Hi Tony,

I have tried your new code for this workaround, but couldn't get it to work. Text boxes are still visible.
I am having this issue in both array and array(numbers) types of questions.

I'm using the latest LS 3.7 hosted by LS team, not installed locally.
Attachments:

Please Log in or Create an account to join the conversation.

More
2 weeks 4 days ago #168217 by tpartner
tpartner replied the topic: Adding textbox in basic array
As stated, this workaround is for checkbox arrays, not normal radio arrays.

Regarding not working in checkbox arrays, I had a typo in the code to insert in the question text. It should be this:

<script type="text/javascript" charset="utf-8">
	$(document).on('ready pjax:scriptcomplete',function(){
		$('#question{QID}').cbArrayComments2({
			column: 3 // Text Input column (-1 will default to last column)
		});
	});
</script>

Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
The following user(s) said Thank You: krosser

Please Log in or Create an account to join the conversation.

More
2 weeks 4 days ago #168230 by krosser
krosser replied the topic: Adding textbox in basic array
Yes, I just thought it might work for the other array type if it didn't for the checkboxes.. But it would be awesome if you could also look into the normal radio case, please. :)

I have checked the new code and it works now. But the problem is that it hides all other multiple short text questions in the group. So it looks like the code needs to be adjusted (similar to what you have suggested before).

Change this line:
var nextQuestion = thisQuestion.nextAll('.multiple-short-txt');

To this:
var nextQuestion = thisQuestion.nextAll('.multiple-short-txt:eq(0)');

After that it does not hide the multiple text questions following the array.

I'm using the latest LS 3.7 hosted by LS team, not installed locally.
Attachments:

Please Log in or Create an account to join the conversation.

More
2 weeks 3 days ago #168327 by krosser
krosser replied the topic: Adding textbox in basic array
Hey guys,

I'm trying to write a JavaScript for a normal radio array, combining different codes from Tony, but cannot make it work. I succeed in hiding the multiple short texts but they don't appear on top of the array question.

This is what I'm trying to make.


The JS code:

1) this is added to custom.js
// A JQuery plugin to insert comments into a specified column of a normal radio array VERSION 1
(function( $ ){
 
	$.fn.cbArrayComments3 = function(options) {  
 
		var opts = $.extend( {
			column: -1 // Text Input column (-1 will default to last column) 
		}, options);
 
		return this.each(function() { 
 
			// Identify the questions
			var thisQuestion = $(this);
			var q1ID = $(thisQuestion).attr('id').replace(/question/, '');
			var thisQuestion = $('#question'+q1ID);
			var nextQuestion = thisQuestion.nextAll('.multiple-short-txt:eq(0)');
			var q2ID = $(nextQuestion).attr('id').replace(/question/, '');
 
			//Hide the multiple-short-text
			nextQuestion.hide();
 
			// Move the text inputs
			var column = $('tr.subquestion-list:eq(0) td.answer-item', thisQuestion).length;
			if(opts.column > 0) {
				column = opts.column;
			}
 
			$('tr.subquestion-list', thisQuestion).each(function(i) {
				var thisCode = $(this).attr('id').split('X')[2].split(q1ID)[1];
				$('td.answer-item:eq('+(column-1)+') input[type="radio"]', this).css({
					'position': 'absolute',
					'left': '-9999em'
				});
				$('td.answer-item:eq('+(column-1)+')', this).removeClass('radio-item').addClass('inserted-text-item').append($('input[type="text"][id$="X'+q2ID+thisCode+'"]', nextQuestion));
			});
 
 
			// Listeners on the text inputs
		$('input[type="text"]', thisQuestion).on('keyup change', function(e) {
			var thisRadio = $(this).closest('td').find('input[type="radio"]');
			var thisRadioVal = thisRadio.val();
			if($.trim($(this).val()) != '') {
				$(thisRadio).trigger('click');
			}
			else {
				$(thisRadio).prop('checked', false);
				thisRadioVal = '';
			}
			// Reset Expression Manager
			checkconditions(thisRadioVal, $(thisRadio).attr('name'), 'radio', 'click');
		});
 
		// Listeners on the radios
			$('input[type="radio"]', thisQuestion).on('click', function(e) {
				if(!$(this).closest('td').hasClass('inserted-text-item')) {
					$(this).closest('tr').find('input[type="text"]').val('');
				}
			});
		});
 
	};
})( jQuery );


2) this is added to the source code of the question:
<script type="text/javascript" charset="utf-8">
	$(document).on('ready pjax:scriptcomplete',function(){
		$('#question{QID}').cbArrayComments3({
			column: 3 // Text Input column (-1 will default to last column)
		});
	});
</script>


I would appreciate if someone can check it out.
Cheers!

I'm using the latest LS 3.7 hosted by LS team, not installed locally.
Attachments:

Please Log in or Create an account to join the conversation.

More
2 weeks 3 days ago #168340 by tpartner
tpartner replied the topic: Adding textbox in basic array
Change all instances of "tr.subquestion-list" to "tr.answers-list".

Cheers,
Tony Partner
Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
The following user(s) said Thank You: krosser

Please Log in or Create an account to join the conversation.

More
2 weeks 3 days ago #168344 by krosser
krosser replied the topic: Adding textbox in basic array

tpartner wrote: Change all instances of "tr.subquestion-list" to "tr.answers-list".


Awesome! It worked! :woohoo:

I'm using the latest LS 3.7 hosted by LS team, not installed locally.

Please Log in or Create an account to join the conversation.

Start now!

Just create your account and start using Limesurvey today.

Register now
Join our Newsletter!