当前位置: 首页 > 面试题库 >

JS&jQuery无法检测到html元素,并说它们是未定义的

公冶高义
2023-03-14
问题内容

我是JS和的新手jQuery,我正尝试使用它们制作字幕播放器。不幸的是,我还处于早期阶段。

当我尝试HTML通过.js文件选择某些元素时,它的行为就像找不到所需的元素,并且什么也没有发生。如果我尝试提醒元素的值或HTML,它会提醒undefined

所以这是代码:

HTML

  <!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <script src="jquery-2.1.3.min.js"></script>
        <script src="script.js"></script>
        <style type="text/css">
            body{
                margin: 0px;
                padding: 0px;           
            }           
            #wrapper{
                width: 150px;
                text-align: center;
                background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,#75bdd1), color-stop(14%,#75bdd1), color-stop(100%,#2294b3));
                padding: 10px 2px;
            }
            h3{
                font-family: Arial, Helvetica, sans-serif;
            }
            img{
                width: 50px;
                margin: 0 auto;     
            }
            input{
            display: none;          
            }
        </style>


    </head>
    <body>
        <div id="wrapper">
            <h3>Select subtitles file</h3>
                <img src="browse.png" alt="browse">
        </div>
        <input type="file" accept=".srt" id="file">
    </body>
</html>

script.js

$("div").click(function () {
    console.log('loaded');
});

谢谢。


问题答案:

因为你的script标签上面的HTML定义,它作用于的元素,它无法找到他们,因为他们不为运行代码的时候存在。这是您页面中事物发生的顺序:

  1. htmlhead创建的元素
  2. meta创建元素及其含量注意到解析器
  3. scriptjQuery 的元素已创建
  4. 解析器 停止 并等待jQuery文件加载
  5. 加载后,将执行jQuery文件
  6. 解析继续
  7. script您的代码的元素已创建
  8. 解析器 停止 并等待文件加载
  9. 加载后,您的脚本代码将运行-并且找不到任何元素,因为还没有div元素
  10. 解析继续
  11. 浏览器完成了页面的解析和构建,包括创建您要在脚本中尝试访问的元素

纠正方法:

  1. script元素移到最末端,就在结束</body>标记之前,因此所有元素在代码运行之前就存在。除非有充分的理由不这样做,通常这是最好的解决方案。

  2. 使用jQuery的ready功能。

  3. 使用script元素上的defer属性,但要注意,并非所有浏览器都支持该属性。

但同样,如果您控制脚本元素的位置,通常#1通常是最好的选择。



 类似资料:
  • 问题内容: 我正在重写帖子以使其更清晰 我有一个具有以下操作的HomeController SuperMapModel是具有2个视图模型的超类-scM用于搜索面板部分控制-saVM用于MapDetailList部分控制 在页面上加载SuperMapModel传递给View,该View将各自的模型传递给每个部分控件 我的MapDetails部分控制非常复杂,因此我提供了一个简化的版本 setResu

  • 问题内容: 使用和,我一直在页面上隐藏/显示一个元素,但是有两个按钮,一个用于隐藏,一个用于显示。我现在想要 一个按钮来同时切换 两者 。 我的HTML / JavaScript是这样的: 我想要的HTML / JavaScript: 如何检测元素是否可见? 问题答案: 您正在寻找: 尽管您可能考虑到仍在其他地方使用它,但应该将选择器更改为使用jQuery: 重要的是要注意,如果目标元素的父元素中

  • 问题内容: 我试图仅使用jQuery在HTML元素为空的情况下调用函数。 像这样: 问题答案: 编辑: 正如某些人指出的那样,浏览器对空元素的解释可能会有所不同。如果您想忽略不可见的元素(例如空格和换行符)并使实现更加一致,则可以创建一个函数(或仅使用其中的代码)。 您也可以将其放入jQuery插件,但是您知道了。

  • 问题内容: 我需要检查元素是否具有定义的CSS属性,但是使用jQuery.css()函数时遇到了一些麻烦。 我要寻找的属性是宽度。 如果该元素没有定义的宽度,请尝试以下操作: 我得到了浏览器的计算宽度。 问题答案: 这是我放在一起的一个非常简单(可能需要改进)的插件,它将为您提供内联样式属性的值(如果找不到该属性,则返回): 您可以这样称呼它: 这是一个有效的例子。 请注意,它只会返回匹配集中 第

  • 本文向大家介绍img、input标签它们是行内元素还是块级元素?相关面试题,主要包含被问及img、input标签它们是行内元素还是块级元素?时的应答技巧和注意事项,需要的朋友参考一下 结论:属于行内元素,也是替换元素(行内块元素) 详说: 简单的说行内元素也就是display:inline的元素,行内块元素就是display:inline-block的元素,典型的有input 它们的关系我觉得行内

  • 我的Xpath是正确的 没有这样的元素:无法定位元素:{“method”:“xpath”,“selector”:“//*[包含(@ng click,'authenticationCtrl.onSubmitMage()')]”} 我用Try-xpath测试了我的xpath,它可以工作,但当我编译代码时,仍然收到错误 页面对象: 步骤定义: 我想点击按钮 谢谢