Javascript JS函数似乎没有被调用

Javascript JS函数似乎没有被调用,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我有一个只有一个元素的数组(最终我肯定会扩展数组)。一开始,数组中的元素弹出,然后程序发现元素与“F2”匹配,然后出现一个球。但是,球没有出现。我很关心我的js代码,因为我有点同时使用js和jQuery。虽然我可以把jQuery看作JS的库,但我不确定它是否是这里的问题。我调试JS代码的方法是抛出一堆alert(),并尝试找出哪一行alert()没有被调用,因此我知道有一个问题,但再一次,我不确定这样做是否最好,因为JS中没有IDE $(文档).ready(函数(){ 风险值注释=[“F2”]

我有一个只有一个元素的数组(最终我肯定会扩展数组)。一开始,数组中的元素弹出,然后程序发现元素与“F2”匹配,然后出现一个球。但是,球没有出现。我很关心我的js代码,因为我有点同时使用js和jQuery。虽然我可以把jQuery看作JS的库,但我不确定它是否是这里的问题。我调试JS代码的方法是抛出一堆
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');
    }
});