Lig*_*ica -5 javascript jquery
我有以下使用 jQuery 1.8.0 的代码。它应该每秒增加文本框中的值,但当我运行它时没有任何反应。
我已经很长时间没有写过任何 JavaScript 了(我已经习惯了 C++),所以我确信我遗漏了一些明显的东西。jQuery 是否与该setInterval函数有冲突?我可以不在#timer计时器内使用选择器吗?
$(function() {
var i = 0;
setInterval(1000, function() {
i++;
$('#timer').val(i);
});
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
<input type="textbox" id="timer" />Run Code Online (Sandbox Code Playgroud)
首先,你有要颠倒的论点setInterval。
$(function() {\n var i = 0;\n setInterval(function() {\n i++;\n $(\'#timer\').val(i);\n }, 1000);\n});Run Code Online (Sandbox Code Playgroud)\n\n其次,您\xe2\x80\x99 依赖于setInterval提供可靠的计数。你应该使用单调时钟;performance.now()在现代浏览器中提供了这一点。当系统时钟调整时,基于Date.now()或new Date()容易导致不良行为的解决方案。
$(function () {\n var start = performance.now();\n\n setInterval(function () {\n var elapsed = (performance.now() - start) / 1000;\n $(\'#timer\').val(Math.floor(elapsed));\n }, 1000);\n});Run Code Online (Sandbox Code Playgroud)\n\n第三,type文本框<input>s 是text,而不是textbox。
<input type="text" id="timer" />Run Code Online (Sandbox Code Playgroud)\n\n第四,您\xe2\x80\x99使用可编辑文本框来显示变化的值,而不将其用作任何类型的输入。这对用户来说不太友好;尝试一个<span>,根据需要设计样式。如果需要选择数字,您可能需要暂停计数。
$(function () {\n var start = performance.now();\n\n setInterval(function () {\n var elapsed = (performance.now() - start) / 1000;\n $(\'#timer\').text(Math.floor(elapsed));\n }, 1000);\n});Run Code Online (Sandbox Code Playgroud)\n\n<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>\n<span id="timer"></span>Run Code Online (Sandbox Code Playgroud)\n\n第五,您\xe2\x80\x99 使用的是过时版本的 jQuery。由于您\xe2\x80\x99正在使用performance.now(),jQuery 2.1.x 是正确的,但第六,根本没有 jQuery 会更好。
document.addEventListener(\'DOMContentLoaded\', function () {\n var start = performance.now();\n\n setInterval(function () {\n var elapsed = (performance.now() - start) / 1000;\n document.getElementById(\'timer\').textContent = Math.floor(elapsed);\n }, 1000);\n});Run Code Online (Sandbox Code Playgroud)\n\n您现在可以删除<script>包含 jQuery 的元素。现在这揭示了 jQuery 中不太明显的低效率问题;你\xe2\x80\x99每秒都会查询计时器元素。第七:在其他地方跟踪它。
document.addEventListener(\'DOMContentLoaded\', function () {\n var timer = document.getElementById(\'timer\');\n var start = performance.now();\n\n setInterval(function () {\n var elapsed = (performance.now() - start) / 1000;\n timer.textContent = Math.floor(elapsed);\n }, 1000);\n});Run Code Online (Sandbox Code Playgroud)\n\n第八,将<script>块移到元素下方,您将不必浪费时间等待DOMContentLoaded或键入其事件侦听器。记住也要处于严格模式。
(function () {\n \'use strict\';\n\n var timer = document.getElementById(\'timer\');\n var start = performance.now();\n\n setInterval(function () {\n var elapsed = (performance.now() - start) / 1000;\n timer.textContent = Math.floor(elapsed);\n }, 1000);\n})();Run Code Online (Sandbox Code Playgroud)\n\n<span id="timer"></span>\n\n<script src="timer.js" async></script>Run Code Online (Sandbox Code Playgroud)\n\n现在\xe2\x80\x99 还不错。
\n| 归档时间: |
|
| 查看次数: |
760 次 |
| 最近记录: |