【问题标题】:Uncaught TypeError: Cannot read property 'querySelector' of null未捕获的类型错误:无法读取 null 的属性“querySelector”
【发布时间】:2017-01-25 10:33:35
【问题描述】:

我在 Visual Studio 2015 中使用 Cordova 应用程序。我添加了一个简单的按钮,可将应用程序的背景颜色更改为红色。但它给出了上述错误。

index.html

<!DOCTYPE html>
<html>
    <head>
    <!--
        Customize the content security policy in the meta tag below as needed. Add 'unsafe-inline' to default-src to enable inline JavaScript.
        For details, see http://go.microsoft.com/fwlink/?LinkID=617521
    -->
        <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
        
        <meta name="format-detection" content="telephone=no">
        <meta name="msapplication-tap-highlight" content="no">
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
        <link rel="stylesheet" type="text/css" href="css/index.css">
        <title>WeatherApp</title>
    </head>
    <body>
        <p>Hello World</p>
        <input type="button" name="color" value="Change Color" id="color" onclick="changeColor()">
        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="scripts/platformOverrides.js"></script>
        <script type="text/javascript" src="scripts/index.js"></script>
    </body>
</html>

index.js

    (function () {
    "use strict";

    document.addEventListener( 'deviceready', onDeviceReady.bind( this ), false );

    function onDeviceReady() {
        // Handle the Cordova pause and resume events
        document.addEventListener( 'pause', onPause.bind( this ), false );
        document.addEventListener('resume', onResume.bind(this), false);
        
        // TODO: Cordova has been loaded. Perform any initialization that requires Cordova here.
        var parentElement = document.getElementById('deviceready');
        var listeningElement = parentElement.querySelector('.listening');
        var receivedElement = parentElement.querySelector('.received');
        listeningElement.setAttribute('style', 'display:none;');
        receivedElement.setAttribute('style', 'display:block;');

    };


    function onPause() {
        // TODO: This application has been suspended. Save application state here.
    };

    function onResume() {
        // TODO: This application has been reactivated. Restore application state here.
    };

    function changeColor() {
        var change = document.querySelector('#color');
        change.addEventListener('click', change, false);
    }

    function change() {
        var clr = document.querySelector('body');
        clr.style.backgroundColor = 'red';
    }


} )();

enter image description here

【问题讨论】:

    标签: javascript visual-studio cordova


    【解决方案1】:
    var parentElement = document.getElementById('deviceready');
    var listeningElement = parentElement.querySelector('.listening');
    

    您没有 ID 为 deviceready 的 div,因此您的 parentElement 将为空。

    编辑:我认为您可以删除整个块,因为它属于默认的科尔多瓦页面布局,当您创建一个新项目时:

    // TODO: Cordova has been loaded. Perform any initialization that requires Cordova here.
    var parentElement = document.getElementById('deviceready');
    var listeningElement = parentElement.querySelector('.listening');
    var receivedElement = parentElement.querySelector('.received');
    listeningElement.setAttribute('style', 'display:none;');
    receivedElement.setAttribute('style', 'display:block;');
    

    【讨论】:

      【解决方案2】:

      我认为 dom 尚未加载,您尝试进行选择,因此它返回 null。 尝试将这些行移到 onDeviceReady() 之外

      var listeningElement = parentElement.querySelector('.listening');
      var receivedElement = parentElement.querySelector('.received');
      listeningElement.setAttribute('style', 'display:none;');
      receivedElement.setAttribute('style', 'display:block;');
      

      【讨论】:

      • 我不认为这是 DOM 加载顺序问题。看起来更像是从默认 Cordova HTML 索引页面中删除的搜索 div,而无需编辑 JS 代码。
      • 非常感谢。错误已删除,但按钮仍然不起作用。按钮没有改变背景或正文的颜色
      猜你喜欢
      • 2021-11-18
      • 1970-01-01
      • 2022-01-19
      • 2021-12-01
      • 2022-07-02
      • 2022-06-14
      • 2022-10-23
      • 2023-03-05
      相关资源
      最近更新 更多