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
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.
More
7 years 9 months ago #137511 by MrHappyAndCo
Hey there, I've been using the following code for quite some time now to automatically proceed to the next question:
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>

Unfortunately, now that I upgraded LimeSurvey (Version 2.50+ Build 160606) I get the following message when choosing an answer option:

One or more mandatory questions have not been answered . Please answer this first to proceed !


Any idea why this happens?

Thanks for the help!
The topic has been locked.
  • tpartner
  • tpartner's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
7 years 9 months ago #137525 by tpartner
It works fine for me using the default template and list-radio questions. What template and question types are you using?

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