我正在构建一个点击式游戏,我需要通过将它与数组进行比较来查看用户选择的答案是否正确。
这是JSON
{
quiztitle: "Select the States",
correct_answers: "9",
states: [
{
state_name: "Alabama",
image: "alabama_image",
answer: "correct"
},
{
state_name: "Alberta",
image: "alberta_image",
answer: "incorrect"
},
ect...
当用户点击按钮时,它会获取值并需要检查它是否正确。什么是最好的方法。
这是我到目前为止的尝试:
$('body').on('click', '.matchBtns', function(){
var value = $(this.innerHTML);
if($.inArray(value, data.states)){
//its in the array
}else{
//its not
}
});
我不确定如何访问值'answer'以检查是否正确
这是html按钮
<button class="matchBtns">*State Name Here*</button>
答案 0 :(得分:2)
你已经有了一些方法,但还有很多工作要做。首先,您不希望按钮内的文本的jQuery对象;你只想要文字。所以你可以这样做:
var value = $(this).text();
其次。 $.inArray
因两个原因无效。一 - 它是一个多维的对象数组。二 - 你不只是想检查它是否在阵列中;你想检查它是否在数组和具有正确的属性。
因此,您可以遍历数组并查看是否有任何答案是正确的:
$('body').on('click', '.matchBtns', function() {
var value = $(this).text();
var correct = false;
$.each(data.states, function(i, state) {
if ( state.state_name == value && state.answer == 'correct' ) {
correct = true;
return false; // break out of $.each()
}
});
if ( correct ) {
// true
}
else {
// false
}
});
这是一个有效的jsFiddle:https://jsfiddle.net/s0gtqjcL/
您可以通过将answer
(或correct
)存储为布尔值而非字符串来简化此操作。这样,你可以这样做:
if ( state.state_name == value && state.correct )
答案 1 :(得分:0)
如果您喜欢underscore
,可以尝试:
$('body').on('click', '.matchBtns', function(){
var value = $(this.innerHTML);
if(_.contains(_.pluck(data.states, "answer"), value)) {
//is in the array
}
else{
//is not
}
});
_.pluck(array, "x")
是_.map(array, function(x){return x.x;)
的简写,因此您不会尝试比较字符串和对象
答案 2 :(得分:0)
你将不得不循环回答。
regionCode