Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jquery进行正确或错误验证_Javascript_Jquery_Html - Fatal编程技术网

Javascript 使用jquery进行正确或错误验证

Javascript 使用jquery进行正确或错误验证,javascript,jquery,html,Javascript,Jquery,Html,我正在尝试制作一个正确或错误的游戏,需要帮助编写函数来验证用户是否正确。我的DOM结构如下: <ul class="multiplechoice_answergroup"> <li class="multiplechoice_answer True"> <input class="checkbox" type="checkbox" name="checkme"> <p>This answer is true</p>

我正在尝试制作一个正确或错误的游戏,需要帮助编写函数来验证用户是否正确。我的DOM结构如下:

<ul class="multiplechoice_answergroup">
  <li class="multiplechoice_answer True">
    <input class="checkbox" type="checkbox" name="checkme">
    <p>This answer is true</p>
  </li>

  <li class="multiplechoice_answer False">
    <input class="checkbox" type="checkbox" name="checkme">
    <p>This answer is false</p>
  </li>
</ul>
而不是做

$('.multiplechoice_answergroup').children('li')
   .find('input[type="checkbox"]:checked')
你应该这样做

$('.multiplechoice_answergroup').children('li')
   .find('input[type="checkbox"]').is(":checked")
原因:

find返回一个jQuery对象,该对象在JavaScript中验证为true。因此,第一个或第二个if表达式将始终为true,紧跟&&的部分始终为true

当然这里也有:

$('.multiplechoice_answergroup').children('li').find('input[type="checkbox"]').is(":not(:checked)")
那么:

truefalseSubmit = function() {
    $('.multiplechoice_answer input[type="checkbox"]').click(function() {
        /**
         * Check if the parent div where checkbox is, has the class "true"
         */

            if($(this).parent().hasClass('true'))
                return correctAnswer();

        /**
         * Answer is incorrect
         */

            return incorrectAnswer();
    });
}

我认为应该是这样的:

truefalseSubmit = function() {
  var $trueCheckbox = $('.multiplechoice_answergroup li.True input[type="checkbox"]');
  var $falseCheckbox = $('.multiplechoice_answergroup li.False input[type="checkbox"]');
  if ($trueCheckbox.is(':checked') && $falseCheckbox.is(':not(:checked)')) {
    correctAnswer();
  } else {
    incorrectAnswer();
  }
};
为什么不这样呢

html:


您还可以继续查找并检查集合的长度。$'。multipleEchoice\u answergroup li input[type=checkbox]:checked。如果存在任何选中的项,长度>0将返回true,否则返回false。@ps2goat您可以,但我个人认为is更合适。我一直认为这是一个正确的答案,无论我做什么。您所说的“如果用户是对的还是错的”是什么意思?你为什么用复选框来代替单选按钮来选择是/否?这也是我的问题。是另一种选择,不使用li元素本身
truefalseSubmit = function() {
  var $trueCheckbox = $('.multiplechoice_answergroup li.True input[type="checkbox"]');
  var $falseCheckbox = $('.multiplechoice_answergroup li.False input[type="checkbox"]');
  if ($trueCheckbox.is(':checked') && $falseCheckbox.is(':not(:checked)')) {
    correctAnswer();
  } else {
    incorrectAnswer();
  }
};
<ul>
  <li class="answer-button true">
    <p>This answer is true</p>
  </li>

  <li class="answer-button false">
    <p>This answer is false</p>
  </li>
</ul>
var answerHandler = function (answer) {
    // do something
};
$('.answer-button').click(function () {
    answerHandler($(this).hasClass('true'));
});