我无法弄清楚语法逻辑错误在最下面的脚本中的位置。基本上它的作用是提醒人们,他们必须等待1.5秒才能回答单选按钮类型问题并自动转到下一页。如果他们花费超过1.5秒,则不会发出警报。
此脚本仅针对一次单击事件编写,但我需要它才能处理两个嵌套事件,单击单选按钮选项会自动触发“下一步”按钮以转到下一页。例如,如果您取出以下事件(及其结束括号),则效果很好:
$("[class*=bfasg] .radio").click(function(){
我已经检查了Esprima的语法以确保括号是正确的,所以问题出在其他地方。
$(document).ready(function() {
minTime(1.5);
function minTime(minTime) {
var startTime = new Date();
$("[class*=bfasg] .radio").click(function(){$("#movenextbtn").click(function(){
var endTime = new Date();
if((endTime - startTime)/1000 <= minTime) {
alert('You must spend at least '+minTime+' seconds on the question.');
return false;
}
else {
return true;
}
});
});
}
});
那里有哪些专家可以发现问题?
答案 0 :(得分:4)
(请参阅下面的更新问题的答案)
这不是语法错误。这是一个逻辑错误。
如果您一致地格式化代码,它会变得更加清晰:
$(document).ready(function () {
minTime(1.5);
function minTime(minTime) {
var startTime = new Date();
// Hooking up a click handler
$("[class*=bfasg] .radio").click(function () {
// This code doesn't run until/unless someone clicks
// one of the `[class*=bfasg] .radio` elements.
$("#movenextbtn").click(function () {
var endTime = new Date();
if ((endTime - startTime) / 1000 <= minTime) {
alert('You must spend at least ' + minTime + ' seconds on the question.');
return false;
} else {
return true;
}
});
});
}
});
您所做的是“当有人点击[class*=bfasg] .radio
元素时,请在#movenextbtn
元素上挂钩事件处理程序。”
在有人点击单选按钮之前,您可能不想等待连接事件。如果您的目标是在两个元素集上连接click事件,请将它们组合在与CSS中相同的选择器中:
$(document).ready(function () {
minTime(1.5);
function minTime(minTime) {
var startTime = new Date();
$("[class*=bfasg] .radio, #movenextbtn").click(function () {
var endTime = new Date();
if ((endTime - startTime) / 1000 <= minTime) {
alert('You must spend at least ' + minTime + ' seconds on the question.');
return false;
}
});
}
});
(顺便说一句,从jQuery事件处理程序返回true
没有任何意义,所以我已将其删除。)
以下你评论过:
我想点击单选按钮自动触发“下一步”按钮进入下一页,因为我每页只有一个问题。
这并没有从根本上改变一切。您没有显示按钮移动到下一页的功能,但您只需将该代码放在上面的一个click
处理程序中。例如,您仍然在单选按钮和按钮上挂钩click
,您仍然使用公共代码处理该事件。 E.g:
$(document).ready(function () {
minTime(1.5);
function minTime(minTime) {
var startTime = new Date();
$("[class*=bfasg] .radio, #movenextbtn").click(function () {
var endTime = new Date();
if ((endTime - startTime) / 1000 <= minTime) {
alert('You must spend at least ' + minTime + ' seconds on the question.');
return false;
} else {
// ****Move to next page here****
}
});
}
});
或者,您可以单击单选按钮触发按钮上的单击事件,如下所示:
$(document).ready(function () {
minTime(1.5);
function minTime(minTime) {
var startTime = new Date();
// Hook up `click` on the radio buttons
$("[class*=bfasg] .radio").click(function () {
// Respond to click by firing click on the #movenextbtn
$("#movenextbtn").click();
});
// Hook up `click` on the #movenextbtn
$("#movenextbtn").click(function () {
var endTime = new Date();
if ((endTime - startTime) / 1000 <= minTime) {
alert('You must spend at least ' + minTime + ' seconds on the question.');
return false;
}
});
}
});
当你可以使用通用逻辑时,我不是那种发射合成事件的忠实粉丝,但它是一种选择。
答案 1 :(得分:0)
function callMe() {
// Do Something
}
$(document).ready(function() {
callMe();
});
在ready()之外的DECLARE FUNCTION,但是然后在ready()中定义FUNCTION。最好在文档就绪之外定义它们。并且,如果需要,将方法的实现放在文档中。