Javascript JS函数似乎没有被调用
我有一个只有一个元素的数组(最终我肯定会扩展数组)。一开始,数组中的元素弹出,然后程序发现元素与“F2”匹配,然后出现一个球。但是,球没有出现。我很关心我的js代码,因为我有点同时使用js和jQuery。虽然我可以把jQuery看作JS的库,但我不确定它是否是这里的问题。我调试JS代码的方法是抛出一堆Javascript JS函数似乎没有被调用,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我有一个只有一个元素的数组(最终我肯定会扩展数组)。一开始,数组中的元素弹出,然后程序发现元素与“F2”匹配,然后出现一个球。但是,球没有出现。我很关心我的js代码,因为我有点同时使用js和jQuery。虽然我可以把jQuery看作JS的库,但我不确定它是否是这里的问题。我调试JS代码的方法是抛出一堆alert(),并尝试找出哪一行alert()没有被调用,因此我知道有一个问题,但再一次,我不确定这样做是否最好,因为JS中没有IDE $(文档).ready(函数(){ 风险值注释=[“F2”]
alert()
,并尝试找出哪一行alert()
没有被调用,因此我知道有一个问题,但再一次,我不确定这样做是否最好,因为JS中没有IDE
$(文档).ready(函数(){
风险值注释=[“F2”];
if($(“#”+notes.pop()).innerHTML==“F2”){
$(“#F2”).addClass(“显示”)
}否则{
$(“#F2”)。删除类(“显示”);
}
});代码>
#F2{
宽度:10px;
高度:10px;
背景:#ccc;
边框:2个实心#ccc;
边界半径:50%;
}
.未显示{
显示:无;
}
.显示{
显示:块;
}
我想你错过了选择器中的#我在代码中看到了一些问题
第一个$('#'+notes.pop()).innerHTML
不正确。它应该是$('#'+notes.pop()).html()
其次,在div
中没有文本F2
。因此,($('#'+notes.pop()).html()=='F2')
将始终失败
我稍微修改了一下
#F2{
宽度:10px;
高度:10px;
背景:#ccc;
边框:2个实心#ccc;
边界半径:50%;
}
.未显示{
显示:无;
}
.显示{
显示:块;
}
地上二层
$(文档).ready(函数(){
风险值注释=[“F2”];
调试器;
如果($('#'+notes.pop()).html()=='F2'){
$('#F2').addClass('显示')
}否则{
$('#F2')。removeClass('显示');
}
});
从您的问题中,我了解到您希望弹出数组元素并将其与“F2”进行比较。如果匹配,则需要更改div类
下面是实现这一点的正确javascript代码
$(document).ready(function() {
var notes = ["F2"];
if(notes.pop() === 'F2') {
$('#F2').addClass('shown')
} else {
$('#F2').removeClass('shown');
}
});
您可以在找到工作示例,您误解了“innerHTML”的用法。因此,您可以试试这个
$(文档).ready(函数(){
风险值注释=[“F2”];
if($('#'+notes.pop()).length){
$('#F2').addClass('显示')
}否则{
$('#F2')。removeClass('显示');
}
});
无需向div添加内容,也无需与div内容进行比较。由于您是通过ID进行选择,请继续并比较ID
$(document).ready(function() {
var notes = ['F2'],
$el;
// When selecting an element with jQuery, do it just once and
// then reference it as much as you want
$el = $('#' + notes.pop());
// Use strict comparison unless you have an excellent reason not to (rare)
if($el.get(0).id === 'F2') { // Just compare the ID, not sure why we need to even look at the content here
$el.addClass('shown');
} else {
$el.removeClass('shown');
}
});
至于调试,您应该使用浏览器DevTools逐步完成代码。通过这种方式,您可以在特定的执行点检查值,从而简化调试
编辑:在您的条件中,如果
条件满足,您将获得标签名为F2的所有元素。将$(notes.pop())
更改为$('#'+notes.pop())
谢谢。这肯定是问题所在,但修复后,仍然有一些问题。@vkosyj您希望您的代码做什么?@kevin628如果一切正常,那么应该会出现一个问题。@vkosyj我对您为什么要做整个。innerHTML='F2'
位有点困惑。因为元素没有内容,所以它不是真的。这样你的球就不会出现了,谢谢。这肯定是问题所在,但修复后,仍然存在一些问题。请详细说明为什么使用。innerHTML
是不正确的?有没有办法在运行F2后隐藏F2,因为我只想显示一个球。谢谢。@godfrzero$('#F2')将返回未定义innerHTML的jQuery对象。如果您尝试$('#F2')[0]。innerHTML将起作用。innerHTML的用法@vkosyj发布未经测试代码的错误:)已修复,现在应该可以使用了。@godrzero再次感谢您。谢谢,最后一个问题。当我将部分代码更改为“var c=note.pop()时$el=$('#'+c);“,代码无法执行。您知道问题出在哪里吗?谢谢。@vkosyj JS控制台中有错误吗?我强烈建议您使用浏览器devtools。在执行notes.pop()
操作的地方添加一个断点,然后逐步检查代码,直到找到问题为止。”。
$(document).ready(function() {
var notes = ['F2'],
$el;
// When selecting an element with jQuery, do it just once and
// then reference it as much as you want
$el = $('#' + notes.pop());
// Use strict comparison unless you have an excellent reason not to (rare)
if($el.get(0).id === 'F2') { // Just compare the ID, not sure why we need to even look at the content here
$el.addClass('shown');
} else {
$el.removeClass('shown');
}
});