To render specific array columns as exclusive in 3.x...
Code:
// A jQuery plugin to render column(s) in checkbox arrays exclusive
(function( $ ){
$.fn.cbExclusiveColumns = function(options) {
var opts = $.extend( {
//columns: [3,4] // Column(s) to be exclusive (comma-separated)
}, options);
return this.each(function() {
var thisQuestion = $(this)
// Add some classes to the checkbox cells
$('td.answer-item', thisQuestion).addClass('normal-item');
$('tr.subquestion-list', thisQuestion).each(function(i) {
var thisRow = $(this);
$.each(opts.columns, function(i, val) {
$('td.answer-item:eq('+(val-1)+')', thisRow).removeClass('normal-item').addClass('exclusive-item');
});
});
// A listener on the checkboxes
$('input[type="checkbox"]', thisQuestion).on('change', function (event) {
handleExclusive($(this).closest('td'));
});
function handleExclusive(thisCell) {
var thisRow = $(thisCell).closest('tr');
// Uncheck the appropriate boxes in a row
if ($(thisCell).hasClass('normal-item')) {
$('.exclusive-item input[type="checkbox"]', thisRow).prop('checked', false);
$('.exclusive-item input[type="text"]', thisRow).val('');
}
else {
$('.answer-item', thisRow).not(thisCell).find('input[type="checkbox"]').prop('checked', false);
$('.answer-item', thisRow).not(thisCell).find('input[type="text"]').val('');
}
// Check conditions (relevance)
$('td.answer-item', thisRow).each(function(i) {
var thisValue = '';
if($('input[type="checkbox"]', this).is(':checked')) {
thisValue = 1;
}
var thisSGQA = $('input[type="checkbox"]', this).attr('id').replace(/cbox_/, '');
$('input[type="hidden"]', this).attr('value', thisValue);
fixnum_checkconditions(thisValue, thisSGQA, 'hidden');
});
}
});
};
})( jQuery );
2) Place something like this in the source of the question (in this case, columns 3 and 4 will be exclusive):
Code:
<script type="text/javascript" charset="utf-8">
$(document).on('ready pjax:scriptcomplete',function(){
$('#question{QID}').cbExclusiveColumns({
columns: [3,4] // Column(s) to be exclusive (comma-separated)
});
});
</script>