jQuery 无法正确执行
jQuery does not execute correctly
这是我的HTML:
<!DOCTYPE html>
<html>
<head>
<title>Esileht</title>
<link rel="stylesheet" href="prax2.css" />
</head>
<body>
<div id="stuff">
<a href="" class="btn" id="stuff_btn">START</a><br />
</div>
<div class="span10" id="word_place">
<div class="word_grid" id="word_place_grid">
<ul>
</ul>
</div>
</div>
<script src="jquery.js"></script>
<script src="underscore.js"></script>
<script src="prax2.js"></script>
</body>
</html>
这是在 prax2.js 文件中无法正常运行的 jQuery:
$('#stuff_btn').on('click', function(){
var words = ["arvuti","pudel","mudel","blaaah","shfuiah","ashcfah"];
var random = Math.floor(Math.random() * words.length);
var word = words[random];
var chars = word.split('');
chars = _.shuffle(chars);
for(var i in chars)
{
$('#word_place_grid ul').append('<li class="letter">' + i + '</li>');
}
})
问题是我想将已洗牌的字母添加到ul
.每个字母都写着一个li
。问题是我得到的只是 1-6 之间的数字,当我尝试在该脚本运行之间记录结果时,有时我会在控制台中得到结果,有时不会,它总是只显示一毫秒左右。
任何人都可以发现问题吗?它是在我的 html 或脚本中还是在其他地方?
您正在使用 for-in
语句,该语句循环访问数组的键/属性。
for(var i in chars)...
for 中的i
是指索引,而不是数组的实际元素。虽然,chars[i]
在这里工作,但它也会打印添加到Array.prototype
的任何其他属性。也就是说,Array.prototype.someProperty = 'a property'
将导致显示'a property'
。
用
for(var i = 0, len = chars.length; i < len; i ++) {
//use the value of chars[i];
}
或者更好地使用forEach
:
chars.forEach(function(ch) {
$('#word_place_grid ul').append('<li class="letter">' + ch + '</li>');
});
此示例有效。
JS斌演示
您已将
事件处理程序附加到链接(指向当前页面)。
JS运行。文档更新。链接被跟踪。页面将重新加载。
如果您希望具有仅适用于 JS 的交互性,请使用<input type="button">
。
如果要使用链接,则链接到具有等效功能的服务器端脚本(渐进式增强很好),然后在 JS 成功运行时取消事件的默认行为。
$('#stuff_btn').on('click', function(evt){ // Capture the event object
// ...
}
evt.preventDefault();
})
你看到这个数字是因为 for 循环,其中 i 是索引。尝试:
for(var i in chars)
{
$('#word_place_grid ul').append('<li class="letter">' + chars[i] + '</li>');
}
使用 e.preventDefault()
来防止 <a>
的默认行为。 并确保脚本位于函数document.ready
$(function(){
$('#stuff_btn').on('click', function(e){
e.preventDefault();
var words = ["arvuti","pudel","mudel","blaaah","shfuiah","ashcfah"];
var random = Math.floor(Math.random() * words.length);
var word = words[random];
var chars = word.split('');
chars = _.shuffle(chars);
for(var i in chars)
{
$('#word_place_grid ul').append('<li class="letter">' + i + '</li>');
}
})
});
相关文章:
- 如何在category.php中执行jquery,这应该适用于类别wordpress中的每个帖子
- 在Grails中的gsp中执行jquery代码
- 使用数组表示法对多个字段执行jQuery日期选择器
- 可以'不能间接执行JQuery函数
- 必须等待执行 jQuery,直到加载服务
- 如何按顺序执行 jQuery 函数
- 如何在 ul 标签下执行 JQuery UI 自动完成
- 如何在Safari提交表单之前执行JQuery
- 对未知数量的元素执行Jquery循环
- 页面内容加载完毕后执行Jquery功能
- 在动态列表中单击的特定img上执行JQuery
- 如何在运行时添加的对象上执行Jquery插件
- Android-Javascript:如何在webview中执行jquery
- 在setTimeout中执行jQuery成员函数而不关闭的方法
- Jquery:在Jquery的(字符串)变量中执行Jquery脚本
- 执行Jquery函数()的两个条件
- 表单提交成功后调用/执行JQuery函数
- 当记录达到10以上时,Bootstrap中的DataTable不执行jQuery
- 通过javascript加载jQuery后执行jQuery代码
- 如何正确执行Jquery动画浮动