我有一个循环,可以生成随机数和位置,以创建4个用户可以选择的答案。
我想要实现的下一步是确定点击按钮的值,同时将其与正确答案的位置进行比较。但是它会一直返回我设置的数据属性,以创建未定义的按钮位置。我不确定为什么会这样。
// ===============================================
// BUTTON AND ANSWER GENERATOR
// ===============================================
function numberGenerator(){
var goodAnswer = 21,
gaPosition = Math.floor(Math.random() * 4),
allAnswers = [],
buttonArea = $("#answerOptions"),
answer,
buttonPosition = 0;
for(n = 0; n < 4; n++) {
buttonPosition++;
if(n == gaPosition) {
answer = goodAnswer;
} else {
do {
answer = Math.floor((Math.random() * 100) + 1);
}
while(answer == goodAnswer || allAnswers.indexOf(answer) !== -1);
}
allAnswers.push(answer);
input = $('<div class="col-xs-6"><button class="btn btn-primary answerButton" data-button="'+buttonPosition+'">'+ answer +'</button></div>');
input.appendTo(buttonArea);
}
console.log(allAnswers);
console.log(gaPosition);
$(document).on('click', '.answerButton' , function(){
var clickedButton = $(this).data('data-button');
console.log(clickedButton);
if(clickedButton == gaPosition) {
alert("Correct!");
}
else {
alert("Incorrect!");
}
});
}
答案 0 :(得分:1)
您可以省略data-button
中的“数据”。
// getter
var clickedButton = $(this).data('button');
// setter (just to elaborate)
var example = 'string' || 0;
$(this).data('button', example);
// in case of multiple data attributes,
// you get the collection of all data attributes
var clickedButton = $(this).data();
var somethingElse = clickedButton.button;
将clickedButton
重命名为buttonData
例如......
另一方面,您还可以将关键字与数据属性结合起来
<button data-button-value="1" data-button-action="step2" data-button-valid="true"></button>
然后您可以通过关键字进行检索:
var buttonValue = $(this).data('button-value'); // returns an integer
var buttonAction = $(this).data('button-action'); // returns a string
var buttonValid = $(this).data('button-valid'); // returns a boolean
或者作为 camelCased 集合:
var buttonData = $(this).data();
var buttonValue = buttonData.buttonValue; // returns an integer
var buttonAction = buttonData.buttonAction; // returns a string
var buttonValid = buttonData.buttonValid; // returns a boolean
要将数据属性检索为字符串而不尝试转换它,请使用attr()
方法作为Clément建议。
var buttonValue = $(this).attr('data-button-value'); // returns a string
var buttonAction = $(this).attr('data-button-action'); // returns a string
var buttonValid = $(this).attr('data-button-valid'); // returns a string
答案 1 :(得分:1)
data函数接受一个键和一个值(如果你指定一个)。关键部分在data-
前缀之后,因为前缀是为了确定它是否是数据属性。
var clickedButton = $(this).data('data-button');
应更改为:
var clickedButton = $(this).data('button');
答案 2 :(得分:1)
上面的代码示例中可能存在两个问题:
请提供一个示例小提琴,以便我们可以调试并解决问题,如果可能的话。会更容易。
答案 3 :(得分:0)
jQuery允许使用$(...)。attr('name_of_attribute')来获取任何HTML属性的值。
尝试替换此行:
var clickedButton = $(this).data('data-button');
通过这个:
var clickedButton = $(this).attr('data-button');