javascript - javascript中变量更改时如何运行代码
问题描述
我是编码新手,我试图弄清楚当变量 i 增加时如何让我的代码运行。
当前代码在 i = 1 时执行,如定义 (.q1)。该代码还将变量 i 增加到 2,但是,在下一次单击 .q2 时,代码没有运行,我不知道为什么。
谁能帮助解释为什么代码不能在下一组按钮(i = 2)上运行?
var score = 0
var i = 1
$('.q' + i).on('click', function() {
if ($(this).is("#correct"))
$(this).addClass("theright") && ++score;
else {
$(this).addClass("thewrong");
}
$('.q' + i).attr('disabled', 'disabled') && ++i;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr>
<td><button class=q1 id=correct type="button">option 1</button></td>
<td><button class=q1 type="button">option 2</button></td>
</tr>
<tr>
<td><button class=q1 type="button">option 3</button></td>
<td><button class=q1 type="button">option 4</button></td>
</tr>
</table>
<table>
<tr>
<td><button class=q2 type="button">option 1</button></td>
<td><button class=q2 type="button">option 2</button></td>
</tr>
<tr>
<td><button class=q2 id=correct type="button">option 3</button></td>
<td><button class=q2 type="button">option 4</button></td>
</tr>
</table>
解决方案
您需要在现有的单击处理程序中为 i+1 注册新的单击处理程序。
var score = 0
var i = 1
function registerClick() {
$('.q'+i).on('click', function(){
if ($(this).is("#correct"))
$(this).addClass("theright") && ++score;
else {
$(this).addClass("thewrong");
}
$('.q'+i).attr('disabled', 'disabled') && ++i;
// register new click handler for ++i
registerClick(i);
})
}
registerClick();
问题是您的代码只为 i = 1 分配了一次clickHandler。因此,每次 i 要更改时,您都需要注册一个新的处理程序。
推荐阅读
- python - 在python中创建一个附加到进程生命周期的文件
- python - 在 python 中创建“.t7”火炬文件
- vectorization - 如何理解 icc 编译器优化报告中的加速?
- splunk - 搜索在字段中包含某些字符串的所有字段
- php - 为什么 PHP 在我的 .html 页面中不再正确解析?
- symfony - Symfony 3.4 部署程序由于共享文件夹的权限被拒绝而失败
- python - Scrapy-Splash:无法使用 scrapinghub/splash:latest 作为基础镜像运行 docker 容器
- react-native - 如何在反应原生 html 文本中显示图像而不是项目符号?
- python - 在执行练习代码时,即使在 datetime 模块之后也会出现错误
- c++ - 特征行加法/减法性能