Welcome to the LimeSurvey Community Forum

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

Automatically proceed to next question (without clicking "next")

More
10 years 1 day ago #106399 by dweisser
I hear what you're saying...
The goal I have is to collect as much data as possible, so I'm not sure redirection is the answer.
Any advice you have to offer is always much appreciated.
David
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
10 years 1 day ago - 10 years 1 day ago #106406 by tpartner
I can't agree with forcing the browser to submit the form. I my opinion, any form submission should be left entirely up to the user.

However, if you just want to remove the survey from an inactive computer you can add something like this to the end of template.js.

(adjust the first 5 variable as necessary)

This will:
- Start an "alert" timer on page load
- When the "alert" timer expires a dialog is popped up and a "redirect" timer is started
- When the "redirect" timer expires the page is redirected
- Closing the dialog will stop the "redirect" timer and restart the "alert" timer
- Any activity in the form (click, key-up, paste, change) will restart the "alert" timer

Code:
$(document).ready(function(){
 
  var txtAlertMessage = 'Anyone there? Do you want to continue?';    
  var txtCloseButton = 'Continue';
  var redirectURL = location.pathname.split('index.php')[0];
  var timeToAlert = 300; // In seconds
  var timeToRedirect = 5; // In seconds
 
  // Page timeout action
  function pageTimeout() {
    window.location = redirectURL;
  }  
 
  // Alert Timer
  var alertTimer;
  function startAlertTimer() {
    alertTimer = setTimeout(function() {
      $('.custom-dialog-1').dialog('open');
    },timeToAlert*1000);
  }    
  function stopAlertTimer() {
    clearTimeout(alertTimer);
  }    
  function restartAlertTimer() {
    clearTimeout(alertTimer);
    startAlertTimer();
  }
  startAlertTimer();
 
  // Redirect Timer
  var redirectTimer;
  function startRedirectTimer() {
    redirectTimer = setTimeout(function() {
      pageTimeout();
    },timeToRedirect*1000);
  }    
  function stopRedirectTimer() {
    clearTimeout(redirectTimer);
  }    
  function restartRedirectTimer() {
    clearTimeout(redirectTimer);
    startRedirectTimer();
  }  
 
  // Insert the alert dialog
  var timeoutDialog = '<div class="custom-dialog-1"> \
              <div class="text">'+txtAlertMessage+'</div> \
              <div class="buttons"> \
                <button class="close" type="button" value="close">'+txtCloseButton+'</button> \
              </div> \
            </div>';
  $(timeoutDialog).dialog({
    autoOpen: false,
    open: function( event, ui ) {
      startRedirectTimer();
      //IE 10 z-index hack
      $('.ui-widget-overlay').css('z-index', Number($('.ui-widget-overlay').css('z-index')) - 2);
    },
    close: function( event, ui ) {
      stopRedirectTimer();
      restartAlertTimer();
    },
    width: 400,
    modal: true,
    resizable: false,
    draggable: false,
    closeOnEscape: true,
    dialogClass: 'timeout-dialog'
  });
  $('.timeout-dialog button').click(function() {
    $('.custom-dialog-1').dialog('close');
  });
 
  // Listener for activity
  $('#limesurvey').on('click keyup paste change' ,function(event){ 
    restartAlertTimer();
  });
});

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Last edit: 10 years 1 day ago by tpartner.
The topic has been locked.
More
9 years 11 months ago #107123 by dweisser
For the record,
I'm not auto-submitting surveys. In the end, no body wants that. However, I was working with the code and trying to figure out why this wont work:
Code:
// Page timeout action
  function pageTimeout() {
    //window.location = redirectURL;
 
// Find the group index 
    var groupIndex = $('div[id^="group-"]').attr('id').split('group-')[1];
 
        if(groupIndex[0] >= 0) {
        $('#movesubmitbtn').click();
        }    
        else {
        window.location = redirectURL;
        }
    }

There seems to be something wrong with this:
Code:
$('#movesubmitbtn').click();
, but I can't figure out what it is. If I simple put this:
Code:
$('#movesubmitbtn').click();
in the timer block without a condition - it auto submits. What gives?

Any thoughts would be appreciated.
David
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
9 years 11 months ago #107124 by tpartner
Hard to say without seeing all of the code but it seems to me that groupIndex is an array item, not an array.

So, this:
Code:
if(groupIndex[0] >= 0) {

Should be this:
Code:
if(groupIndex >= 0) {

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
The topic has been locked.
More
9 years 11 months ago - 9 years 11 months ago #107144 by dweisser
I had tried that, T. And everything else. HEre is the whole code block.
It just won't work inside the condition - and its making me crazy!
Code:
$(document).ready(function(){
 
    var txtAlertMessage = 'Anyone there? Do you want to continue?';    
  var txtCloseButton = 'Continue';
  var redirectURL = location.pathname.split('index.php')[0];
  var timeToAlert = 2; // In seconds
  var timeToRedirect = 2; // In seconds
 
  // Page timeout action
  function pageTimeout() {
// Find the group index - 
    var groupIndex = $('div[id^="group-"]').attr('id').split('group-')[1];
 
        if(groupIndex >= 0) {
        $('#movesubmitbtn').click();
        }    
        else {
        window.location = redirectURL;
        }
    }  
 
 
 
  // Alert Timer
  var alertTimer;
  function startAlertTimer() {
    alertTimer = setTimeout(function() {
      $('.custom-dialog-1').dialog('open');
    },timeToAlert*1000);
  }    
  function stopAlertTimer() {
    clearTimeout(alertTimer);
  }    
  function restartAlertTimer() {
    clearTimeout(alertTimer);
    startAlertTimer();
  }
  startAlertTimer();
 
  // Redirect Timer
  var redirectTimer;
  function startRedirectTimer() {
    redirectTimer = setTimeout(function() {
      pageTimeout();
    },timeToRedirect*1000);
  }    
  function stopRedirectTimer() {
    clearTimeout(redirectTimer);
  }    
  function restartRedirectTimer() {
    clearTimeout(redirectTimer);
    startRedirectTimer();
  }  
 
  // Insert the alert dialog
var timeoutDialog = '<div class="custom-dialog-1">              <div class="text">'+txtAlertMessage+'</div>
<div class="buttons">
<button class="close" type="button" value="close">'+txtCloseButton+'</button>               </div>
</div>';
  $(timeoutDialog).dialog({
    autoOpen: false,
    open: function( event, ui ) {
      startRedirectTimer();
      //IE 10 z-index hack
      $('.ui-widget-overlay').css('z-index', Number($('.ui-widget-overlay').css('z-index')) - 2);
    },
    close: function( event, ui ) {
      stopRedirectTimer();
      restartAlertTimer();
    },
    width: 400,
    modal: true,
    resizable: false,
    draggable: true,
    closeOnEscape: true,
    dialogClass: 'timeout-dialog'
  });
  $('.timeout-dialog button').click(function() {
    $('.custom-dialog-1').dialog('close');
  });
 
  // Listener for activity
  $('#limesurvey').on('click keyup paste change' ,function(event){ 
    restartAlertTimer();
  });
});
Last edit: 9 years 11 months ago by dweisser.
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
9 years 11 months ago - 9 years 11 months ago #107145 by tpartner
You have some syntax problems where inserting the timeoutDialog - it all needs to be on one line or escaped properly - see below.

Having said that, I just don't get what you are trying to do with the IF statement.
- You say if groupIndex is greater than or equal to 0, click Submit, otherwise redirect the page.
- Well, groupIndex will always be greater than or equal to 0 so the redirect will never happen.
- The #movesubmitbtn element only exists on the last page of the survey, so, unless you are there, nothing will ever happen.

Code:
  $(document).ready(function(){
 
    var txtAlertMessage = 'Anyone there? Do you want to continue?';    
    var txtCloseButton = 'Continue';
    var redirectURL = location.pathname.split('index.php')[0];
    var timeToAlert = 2; // In seconds
    var timeToRedirect = 2; // In seconds
 
    // Page timeout action
    function pageTimeout() {
      // Find the group index - 
      var groupIndex = $('div[id^="group-"]').attr('id').split('group-')[1];
 
      if(groupIndex >= 0) {
        $('#movesubmitbtn').click();
      }  
      else {
        window.location = redirectURL;
      }
    }  
 
    // Alert Timer
    var alertTimer;
    function startAlertTimer() {
      alertTimer = setTimeout(function() {
        $('.custom-dialog-1').dialog('open');
      },timeToAlert*1000);
    }    
    function stopAlertTimer() {
      clearTimeout(alertTimer);
    }    
    function restartAlertTimer() {
      clearTimeout(alertTimer);
      startAlertTimer();
    }
    startAlertTimer();
 
    // Redirect Timer
    var redirectTimer;
    function startRedirectTimer() {
      redirectTimer = setTimeout(function() {
        pageTimeout();
      },timeToRedirect*1000);
    }    
    function stopRedirectTimer() {
      clearTimeout(redirectTimer);
    }    
    function restartRedirectTimer() {
      clearTimeout(redirectTimer);
      startRedirectTimer();
    }  
 
    // Insert the alert dialog
    var timeoutDialog = '<div class="custom-dialog-1">\
                <div class="text">'+txtAlertMessage+'</div>\
                <div class="buttons">\
                  <button class="close" type="button" value="close">'+txtCloseButton+'</button>\
                </div>\
              </div>';
    $(timeoutDialog).dialog({
      autoOpen: false,
      open: function( event, ui ) {
        startRedirectTimer();
        //IE 10 z-index hack
        $('.ui-widget-overlay').css('z-index', Number($('.ui-widget-overlay').css('z-index')) - 2);
      },
      close: function( event, ui ) {
        stopRedirectTimer();
        restartAlertTimer();
      },
      width: 400,
      modal: true,
      resizable: false,
      draggable: true,
      closeOnEscape: true,
      dialogClass: 'timeout-dialog'
    });
    $('.timeout-dialog button').click(function() {
      $('.custom-dialog-1').dialog('close');
    });
 
    // Listener for activity
    $('#limesurvey').on('click keyup paste change' ,function(event){ 
      restartAlertTimer();
    });
  });

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
Last edit: 9 years 11 months ago by tpartner.
The topic has been locked.
More
9 years 11 months ago #107152 by dweisser
Ahh, thank you. It makes sense now.
The topic has been locked.
More
9 years 4 months ago - 9 years 4 months ago #114492 by SurveyDennis
Hi,

Just curious, I am using this example with a normal list radio.
I have the question set to mandatory.

The code is working however I don't proceed to the next question properly.
A message popups -
Please use the LimeSurvey navigation buttons or index.
It appears you attempted to use the browser back button to re-submit a page.

(although I clicked the answer).
So in that case it looks like it is not saving the answer.
Code:
<script type="text/javascript" charset="utf-8">
  $(document).ready(function(){
 
    $( '#question{QID} input.radio' ).click(function() {
      document.limesurvey.submit();
    });
  });
</script>

Any ideas?
Thanks, Dennis

Be SurveyFriendly too! Fight against boring surveys! www.SurveyFriendly.com
Last edit: 9 years 4 months ago by SurveyDennis.
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
9 years 4 months ago #114496 by tpartner
LimeSurvey version?

Cheers,
Tony Partner

Solutions, code and workarounds presented in these forums are given without any warranty, implied or otherwise.
The topic has been locked.
More
9 years 4 months ago #114497 by SurveyDennis
Version 2.05

Be SurveyFriendly too! Fight against boring surveys! www.SurveyFriendly.com
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
9 years 4 months ago #114498 by tpartner
Try this:
Code:
<script type="text/javascript" charset="utf-8">  
  $(document).ready(function(){
 
    $('#question{QID} input.radio').click(function() {
      checkconditions($(this).attr('value'), $(this).attr('name'), $(this).attr('type'))
      $('#movenextbtn, #movesubmitbtn').trigger('click');
    });
  });
</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: SurveyDennis
The topic has been locked.
More
9 years 4 months ago #114499 by SurveyDennis
Many thanks, that did the trick!!
Much appreciated

Be SurveyFriendly too! Fight against boring surveys! www.SurveyFriendly.com
The topic has been locked.

Lime-years ahead

Online-surveys for every purse and purpose