Jquery/Javascript提交按钮:第一次成功,第二次重新加载页面
我正在做一个简单的小测验,我的脚本加载了一个新问题和新答案。我的提交按钮只在第一次工作,如果我在第二次选择答案并按提交,脚本/页面似乎会重新加载。为什么? JSFiddle: 如何:选择第二个答案(Gul、Grøn、Blå)并按“SVAR”。它会说你是对的。然后按下按钮“FORTSÆT”。新问题。选择任意按钮并按提交。错误Jquery/Javascript提交按钮:第一次成功,第二次重新加载页面,javascript,jquery,submit,reload,jsfiddle,Javascript,Jquery,Submit,Reload,Jsfiddle,我正在做一个简单的小测验,我的脚本加载了一个新问题和新答案。我的提交按钮只在第一次工作,如果我在第二次选择答案并按提交,脚本/页面似乎会重新加载。为什么? JSFiddle: 如何:选择第二个答案(Gul、Grøn、Blå)并按“SVAR”。它会说你是对的。然后按下按钮“FORTSÆT”。新问题。选择任意按钮并按提交。错误 我希望你能破解我的脚本和语言;)问问你是否需要更多信息 代码: $(文档).ready(函数(){ 无功电流=0; var spg=[{ “问题”:“巴西利亚国旗在哪里?”,
我希望你能破解我的脚本和语言;)问问你是否需要更多信息 代码:
$(文档).ready(函数(){
无功电流=0;
var spg=[{
“问题”:“巴西利亚国旗在哪里?”,
“回答1”:“Rød,Grøn,Gul”,
“回答2”:“居尔,格伦,比勒姆”,
“回答3”:“Hvid,Grøn,Rød”,
“答复4”:“Blå,Rød,Hvid”,
“正确”:“Gul,Grøn,Blå”
}, {
“问题”:“是否有意大利国旗?”,
“回答1”:“居尔,格伦,罗德”,
“回答2”:“Blå,Grøn,Gul”,
“回答3”:“Rød,Gøn,Hvid”,
“答复4”:“Hvid,Rød,Blå”,
“正确”:“Rød,Gøn,Hvid”
}, {
“问题”:“哈尔克·法尔弗是否有澳大利亚国旗?”,
“回答1”:“格伦、古尔、罗德”,
“回答2”:“格伦、古尔、比勒什”,
“回答3”:“Grøn,Hvid,Rød”,
“答复4”:“Rød,Blå,Hvid”,
“正确”:“Rød,Blå,Hvid”
}, ];
var标志=[{
“开始”:”
}, {
“flags”:“brasil.png”
}, {
“旗帜”:“italy.png”
}, {
“旗帜”:“australia.png”
}, ];
函数问题(){
$(“#q”).html('Spørgsmål:
'+spg[current].question);
};
问题();
函数答案(){
$(“#a”).html('Svarmuligheder:
'++'+spg[current]。answer1++'
'++'+spg[current]。answer2++'
'+'+spg[current]。answer3++'
'+'+spg[current]。answer4++'
'++';
$(“#继续”).hide();
$(“#forfra”).hide();
};
答案();
函数rigtig(){
event.preventDefault();
$(“#c”).html('svaret er RIGTIGT:
'+spg[current]。正确);
$(“#额外”).html(“”);
$(“#q”).html(“”);
$(“#knapsvar”).hide();
$(“#继续”).show();
美元(1000美元);
};
$('#knapsvar')。单击(函数(){
event.preventDefault();
如果($('#2')。是(':checked')){
rigtig();
}否则{
$('c').html('Du har ikke valgt rigtigt!Prøv igen');
};
});
$(“#继续”)。单击(函数(){
电流++;
$(“#继续”).hide(1000)
$(“#c”).html(“”)
问题();
答案();
});
$('#forfra')。单击(函数(){
location.reload();
});
})) 对“knapsvar”的“click”处理程序的赋值应如下所示:
$('body').on('click', '#knapsvar', function() {
event.preventDefault();
// and so on
}
如果这样做,您就解决了当前的问题:每次覆盖问题/答案的HTML时,您就摆脱了事件处理程序分配。换句话说,您现在的代码直接在您创建的元素上设置“click”处理程序。当您创建下一个问题时,您将删除该元素,并随之进行事件处理程序分配
通过使用上面的委托表单,处理程序进入
元素。处理程序响应对id为“knapsvar”的任何目标元素的单击,因此为每个问题生成新的HTML并不重要
这并不是最初的主题,但是您可以改进用于问答列表的数据结构,使创建HTML变得更加容易
var spg = [{
"question": "Hvilke farver har det BRASILIANSKE flag?",
answers: [
"Rød, Grøn, Gul",
"Gul, Grøn, Blå",
"Hvid, Grøn, Rød",
"Blå, Rød, Hvid"
],
"correct": 1
}, {
"question": "Hvilke farver har det ITALIENSKE flag?",
answers: [
"Gul, Grøn, Rød",
"Blå, Grøn, Gul",
"Rød, Grøn, Hvid",
"Hvid, Rød, Blå"
],
"correct": 2
}, {
"question": "Hvilke farver har det AUSTRALSKE flag?",
answers: [
"Grøn, Gul, Rød",
"Grøn, Gul, Blå",
"Grøn, Hvid, Rød",
"Rød, Blå, Hvid"
],
"correct": 3
}, ];
现在,要从中构建HTML:
function answers() {
$("#a").html(
'Svarmuligheder: <br>' +
spg[current].answers.map(function(ans, index) {
return "<input type=radio name=a id=" + index + (class == spg[current].correct ? " class=correct " : "") + "> " +
ans + "<br>";
}).join("") +
'<input id="knapsvar" type="submit" value="Svar"><input id="continue" type="submit" value="fortsæt"><input id="forfra" type="submit" value="forfra">'
);
函数答案(){
$(“#a”).html(
“Svarmuligheder:
”+
spg[current].answers.map(函数(ans,索引){
返回“”+
ans+“
”;
}).join(“”)+
''
);
现在,检查答案是否正确的代码可以检查选中的单选按钮是否具有“correct”类
请注意,参加测试的人可以很容易地检查页面源代码并作弊,这一点无论您如何编写JavaScript代码都是正确的。确保安全的唯一方法是在服务器上检查答案。谢谢,它成功了。因此,使用此修复程序,它不会重新加载整个页面,只需在下一个任务中将“旧”JavaScript更改为“新”数组中的离子等等?@user1944082所有这些更改都是“click”事件处理程序的绑定方式。所有其他代码都应该可以。您可以执行“continue”和“forfra”处理程序的方式相同,但因为您没有删除和重建DOM的这些部分,所以这不是一个问题。感谢您的详细说明,我已经更改了其余部分以确定。也许您可以帮我做一件事?在#knapsvar函数中,脚本检查要检查的单选按钮(#2)-但当出现新问题时,“正确”单选按钮会改变(#3,然后是#4)。我将如何在#knapsvar if/else语句中跟进?@user1944082好吧,我将改变数据的结构方式和构建选择的方式,以使其更容易。与其跟踪正确答案的文本,我只需在数据中标记正确答案并使用类作为标记。我将扩展答案。非常简单令人印象深刻的尝试,但是当尝试实现您的答案时,出现了一个错误,遗憾的是什么都没有显示?我刚刚用您的建议替换了spg var和answers函数,我遗漏了什么吗?
function answers() {
$("#a").html(
'Svarmuligheder: <br>' +
spg[current].answers.map(function(ans, index) {
return "<input type=radio name=a id=" + index + (class == spg[current].correct ? " class=correct " : "") + "> " +
ans + "<br>";
}).join("") +
'<input id="knapsvar" type="submit" value="Svar"><input id="continue" type="submit" value="fortsæt"><input id="forfra" type="submit" value="forfra">'
);