Javascript:如果那么语句不起作用

时间:2016-05-17 14:57:32

标签: javascript jquery html json if-statement

我正在构建一个人格类型的测验,并且很难定制结果页面,因为我喜欢它。 display_scenario函数中包含的if语句不起作用。我希望它根据countValue变量的值生成不同的最终消息,但它不起作用。如果你能够帮助我理解它为什么不起作用,我会很感激。

关键代码如下。它在Codepen上也有用:http://codepen.io/msummers40/pen/eZaePe

基本上,测验: - 问人们一系列问题 - 每个答案都分配了一个数字权重 - 此数字权重在countValue变量中计算 - 我想使用countValue变量作为生成四个最终页面之一的方法

我试图在测验结束时设置一个if语句,但它不起作用,我不确定如何让它工作 - 它似乎正在构建无论if语句中有什么内容,最后的视图。

如果你能够提供帮助,谢谢你。

<body>
<!-- QUIZ BEGINS -->
<div id="wrapper">
<h2 id="cyoaHeader">TITLE HERE<br><small>SUBHED</small></h2>
<div id="quizImage">&nbsp;</div>
<div id="prompt">&nbsp;</div>
<div id="options">&nbsp;</div>
<div id="buildingStatus">&nbsp;</div>   
</div>
<div id="addLinks">&nbsp;</div>
<!-- QUIZ ENDS -->

<script>

// JSON for quiz
// Contains the questions, images and variable to give answers weight/direction

var story = {
  intro: {
    prompt: 'You need to get up and out and get on with a big task - what song would propel you out of bed?',
    quizImage: '<img id="quizImage" src="https://upload.wikimedia.org/wikipedia/commons/a/ab/Semi-nude_woman_getting_out_of_bed_(rbm-QP301M8-1887-265a~5).jpg"><br />',
    options: [{
      name: 'Song 4',
      path: 'questionTwo',
      addition: 4
    }, {
      name: 'Song 3',
      path: 'questionTwo',
      addition: 2
    }, {
      name: 'Song 2',
      path: 'questionTwo',
      addition: 3
    }, {
      name: 'Song 1',
      path: 'questionTwo',
      addition: 1
    }]
  },

  questionTwo: {
    prompt: 'Sentence.<br/><br/>Question 2?',
    quizImage: '<img id="quizImage" src="http://www.allgifs.com/wp-content/uploads/2013/09/pancake.gif">',
    options: [{
      name: 'A',
      path: 'result',
      addition: 4
    }, {
      name: 'B',
      path: 'result',
      addition: 3
    }, {
      name: 'C',
      path: 'result',
      addition: 2
    }, {
      name: 'D',
      path: 'result',
      addition: 1
    }]
  },

  result: {
    prompt: 'This is the default statement on the results page. I need to make it tailored to the countValue variable',
    quizImage: '<img id="quizImage" src="http://viralgifs.com/wp-content/uploads/2014/03/cat_did_u_forget.gif">',
    options: [{
      name: 'FINAL CTA',
      path: 'intro',
      addition: 0
    }]
  }
};


//establishing counter for weighted answer
var countValue = 0;
console.log(countValue);
var additionInt = 0;
console.log(additionInt);


// Option is an object with properties {name and path objects, addition array}

function display_scenario(options) { //value passed had been chosen_options
  var option_name = options.name;
  var option_path = options.path;
  var additionInt = options.addition;
  countValue += additionInt;
  // countValue = (additionInt + countValue);
  console.log(additionInt);
  console.log(countValue);
  var scenario = story[option_path];

  // Clear the #prompt, #quizImage, #options, #addLinks, #buildingStatus divs before writing new ones in if statment below -- GROUP THESE IN A FUNCTION BEFORE GO LIVE
  jQuery('#prompt').empty();
  jQuery('#quizImage').empty();
  jQuery('#options').empty();
  jQuery('#addLinks').empty();
  jQuery('#buildingStatus').empty();

  // THIS IF ELSE STRUCTURE DOESN'T SEEM TO BE WORKING - I'M TRYING TO SET IT UP SO THAT IT DISPLAYS ONE OF FOUR OPTIONS, DEPENDING ON THE VALUE OF THE countValue VARIABLE. ATM ONLY THREE OPTIONS ARE IN PLACE; NONE ARE WORKING.
  // Create a <p> to display what the user has chosen if option_name is not null and append it to the #prompt <div>
  if (options.name != 'result') {
    jQuery('<p>').html('<i>You selected <b>' + option_name + '</b></i><br><p>And the running total is ' + countValue + '</p>').appendTo('#buildingStatus');
    // Append the scenario's prompt
    jQuery('<p>').html(scenario.prompt).appendTo('#prompt');
    // Appending an image
    jQuery('<p>').html(scenario.quizImage).appendTo('#quizImage');
    // Appending links in the addLinks div
    jQuery('<div>').html(scenario.addLinks).appendTo('#addLinks');
  } else if (options.name == 'result' && countValue<17) {
    jQuery('<p>').html('<i>Yay! This option worked. You selected <b>' + option_name + '</b></i><br><p>And the running total is ' + countValue + '</p>').appendTo('#buildingStatus');
    // Append the scenario's prompt
    jQuery('<p>').html(scenario.prompt).appendTo('#prompt');
    // Appending an image
    jQuery('<p>').html(scenario.quizImage).appendTo('#quizImage');
    // Appending links in the addLinks div
    jQuery('<div>').html(scenario.addLinks).appendTo('#addLinks');
  } else {  
    jQuery('<p>').html('<i>Yay! This option worked. You selected <b>' + option_name + '</b></i><br><p>And the running total is ' + countValue + '</p>').appendTo('#buildingStatus');
    // Append the scenario's prompt
    jQuery('<p>').html(scenario.prompt).appendTo('#prompt');
    // Appending an image
    jQuery('<p>').html(scenario.quizImage).appendTo('#quizImage');
    // Appending links in the addLinks div
    jQuery('<div>').html(scenario.addLinks).appendTo('#addLinks');
  };

// Append the options into the #options <div>
  // We want to loop through all the options and create buttons for each one. A regular for-loop would not suffice because adding a button is not asynchronous. We will create an asynchronous loop by using recursion
  function add_option_button(index) {
    if (index === scenario.options.length) {
      // Base case
      return;
    }

    var option = scenario.options[index];

    // Create a <button> for this option and append it to the #options <div>
    jQuery('<button>')
      .html(option.name)
      .click(function(e) {
        // This is an onclick handler function. It decides what to do after the user has clicked on the button.

        // First, prevent any default thing that the button is going to do, since we're specifying our own action for the button
        e.preventDefault();

        // We'll want to call display_scenario() with this option
        display_scenario(option);
      })
      .appendTo('#options');

    // Add the next option button
    add_option_button(index + 1);
  }
  add_option_button(0);
}

// This function waits until the document is ready
jQuery(document).ready(function() {
  // Start the quiz
  display_scenario({
    name: null,
    path: 'intro',
    addition: 0
  });
});
</script>

</body>

</html>

1 个答案:

答案 0 :(得分:1)

我认为除了每次都显示场景之外,每当用户更改内容时,您都需要重新计算总和。将display_scenario函数拆分为一个以显示选项,并将其拆分为单独的逻辑以汇总所有选项。