Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

Modify Image Attribute based on List Selection

  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
10 years 4 months ago - 10 years 4 months ago #102455 by tpartner
Replied by tpartner on topic Modify Image Attribute based on List Selection
Okay, if you want the image handled on subsequent pages, it would probably be easiest to set a cookie.

Try this in template.js. It will detect the drop-down answer and set a cookie that is accessed in all pages to set the image path.

Code:
$(document).ready(function(){
 
  // If the dropdown is on this page...
  if($('#answer856216X180X1269').length > 0) {
 
    // Initial cookie setting
    var imageSetting = $('#answer856216X180X1269').val();
    eraseCookie('ls_image_setting');
    createCookie('ls_image_setting', imageSetting, '');
 
    // Listener on the select
    var originalPath = $('#variablelogo').attr('src');
    $('#answer856216X180X1269').change(function(event){
      if($(this).val() == '1') {
        $('#variablelogo').attr('src', 'http://www.fullpath.com/surveyassets/images/image1.png');
      }
      else {
        $('#variablelogo').attr('src', originalPath);
      }
      var imageSetting = $(this).val();
      eraseCookie('ls_image_setting');
      createCookie('ls_image_setting', imageSetting, '');
    });
  }
 
  //Check the cookie and set the image accordingly
  var imageSetting = readCookie('ls_image_setting');
  if(imageSetting == '1') {
    $('#variablelogo').attr('src', 'http://www.fullpath.com/surveyassets/images/image1.png');
  }
});
 
// NO EDITING REQUIRED BELOW HERE
// Some cookie managemnent tools 
function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}
function eraseCookie(name) {
  createCookie(name,"",-1);
}

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Last edit: 10 years 4 months ago by tpartner.
The topic has been locked.
  • dweisser
  • dweisser's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
More
10 years 4 months ago #102457 by dweisser
Replied by dweisser on topic Modify Image Attribute based on List Selection
Hi Tpartner,
I thank you tremendously for the code. I'm afraid though that I cannot get the image to show in Group 2; it still reverts.

Would you believe that I've literally been working on this all day? It has been maddening. Perhaps the cookie has not being set?

I got the image to show in Group2 by storing a value "1", "2", etc in the window.name property.

In the onchnage event, I included the line:
window.name = "1";

Then the function:
window.onload = function() {
var myImage = document.getElementById("variablelogo");
myImage.src = "fullpath/originallogo.png";

if(window.name == '1') {
myImage.src = "fullpath/logo1.png";
}

};

However, I couldn't get the image to show up in the original place when I pressed the previous button.

I like the cookie implementation - window.name feels hacky.
Thoughts?
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
10 years 4 months ago - 10 years 4 months ago #102459 by tpartner
Replied by tpartner on topic Modify Image Attribute based on List Selection
Hi David,

Here is a sample survey and template. Install the template before the survey. After importing the survey, modify all instances of "752182X9X27" in template.js to match the new IDs.

File Attachment:

File Name: test_image_cookie.zip
File Size:86 KB

File Attachment:

File Name: limesurvey...2182.lss
File Size:14 KB

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Last edit: 10 years 4 months ago by tpartner.
The topic has been locked.
  • dweisser
  • dweisser's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
More
10 years 4 months ago - 10 years 4 months ago #102460 by dweisser
Replied by dweisser on topic Modify Image Attribute based on List Selection
TPartner,
You've done more than enough. When I download and install your template and survey - it works as intended. But, not with my template. The changeevent works, but subsequent groups do not reflect the image.

I'm using a citronade clone - it has some issues with javascript outlined in this post .

Would it possibly be due to the fact that your survey has answer codes "A1", "A2", etc. and mine has "1", "2", etc? I changed template.js to reflect this in two places...but perhaps their length is relevant? I'm dreading having to undo all of my work and apply it to a new template for this.

Thank you Tpartner. More than gracious assistance.
David
Last edit: 10 years 4 months ago by dweisser. Reason: more info
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
10 years 4 months ago #102480 by tpartner
Replied by tpartner on topic Modify Image Attribute based on List Selection
Hi David,

No, the response code length should have no affect.

Can you attach an export of your template?

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
The topic has been locked.
  • dweisser
  • dweisser's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
More
10 years 4 months ago #102481 by dweisser
Replied by dweisser on topic Modify Image Attribute based on List Selection
Here you are.
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
10 years 4 months ago #102484 by tpartner
Replied by tpartner on topic Modify Image Attribute based on List Selection
I don't get it. Here is a working test using your template - partnersurveys.com/limesurvey20/index.ph...82/newtest/Y/lang/en

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
The topic has been locked.
  • dweisser
  • dweisser's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
More
10 years 4 months ago - 10 years 4 months ago #102485 by dweisser
Replied by dweisser on topic Modify Image Attribute based on List Selection
Wow. Must be something local? Who knows? As I said before, i have a javascript problem with this template - but apparently that is only local as well.

I'll continue to struggle with it. I can't thank you enough.
David

Update:
T - for some reason, when I moved the cookie js to the top of template.js, it worked.
Hmm...does that mean that perhaps I have some invalid code in there?

Update2:
The only drawback to this method is that it takes a moment for the browser to read the cookie - so you see the "original" image during this time. I'm sure there is a "hack" to prevent this or mitigate this. In the meantime, i set my "original" image to a blank spacer.

You absolutely rock. Do you accept tips? Or bribes. (I'm actually serious ;) )
David
Last edit: 10 years 4 months ago by dweisser.
The topic has been locked.
  • dweisser
  • dweisser's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
More
10 years 3 months ago #102810 by dweisser
Replied by dweisser on topic Modify Image Attribute based on List Selection
Hey T -

Why doesn't this work for a radio list? I switched "change" for the list drop down with "click" for the radio button. And I changed it back...and tried some other things as well.

$(document).ready(function(){

// Initial setting
if($('#answer171641X186X1342').val() == '1') {
$('#variableimage').attr('src', ' www.springboltconsulting.com/surveyasset...ages/demo_image1.png ');
}

// Listener on the select
$('#answer171641X186X1342').click(function(event){
if($(this).val() == '1') {
$('#variableimage').attr('src', ' www.springboltconsulting.com/surveyasset...ages/demo_image2.png ');
}
});
$('#answer171641X186X1342').click(function(event){
if($(this).val() == '2') {
$('#variableimage').attr('src', ' www.springboltconsulting.com/surveyasset...ages/demo_image3.png ');
}
});
$('#answer171641X186X1342').click(function(event){
if($(this).val() == '3') {
$('#variableimage').attr('src', ' www.springboltconsulting.com/surveyasset...ages/demo_image4.png ');
}
});

});

How did you learn this stuff?
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
10 years 3 months ago - 10 years 3 months ago #102832 by tpartner
Replied by tpartner on topic Modify Image Attribute based on List Selection
I'm not sure I get your image settings - in the "Initial setting" if radio 1 is checked, you want it to be demo_image1, but in the listener if radio 1 is checked, you want it to be demo_image2.

Having said that, something like this should work for radios:
Code:
$(document).ready(function(){
 
  // Initial setting
  if($('.question1342 input.radio:checked').attr('value') == '1') {
    $('#variableimage').attr('src', 'http://www.springboltconsulting.com/surveyassets/images/demo_image1.png');
  }
 
  // Listener on the radios
  $('.question1342 input.radio').click(function(event){
    var clickedvalue = $(this).attr('value');
    if(clickedvalue == '1') {
      $('#variableimage').attr('src', 'http://www.springboltconsulting.com/surveyassets/images/demo_image2.png');
    }
    if(clickedvalue == '2') {
      $('#variableimage').attr('src', 'http://www.springboltconsulting.com/surveyassets/images/demo_image3.png');
    }
    if(clickedvalue == '3') {
      $('#variableimage').attr('src', 'http://www.springboltconsulting.com/surveyassets/images/demo_image4.png');
    }
  });
});

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Last edit: 10 years 3 months ago by tpartner.
The topic has been locked.
  • dweisser
  • dweisser's Avatar Topic Author
  • Offline
  • Premium Member
  • Premium Member
More
10 years 3 months ago - 10 years 3 months ago #102839 by dweisser
Replied by dweisser on topic Modify Image Attribute based on List Selection
Hi TPartner -

I'm using the image tick workaround. I don't think it should interfere with the code you so graciously supplied. But, alas, I copied and pasted it directly, and it doesn't seem to work.

I activated a Test Survey here if it is possible for you to see?

Also, the image is attached to a question - not in the template...what do you think?

Thank you so much.
David
Last edit: 10 years 3 months ago by dweisser.
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
10 years 3 months ago #102845 by tpartner
Replied by tpartner on topic Modify Image Attribute based on List Selection
That link just leads to your survey listing page.

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
The topic has been locked.

Lime-years ahead

Online-surveys for every purse and purpose