Uncaught TypeError: Cannot read property 'querySelector' of null

28,434

Solution 1

var parentElement = document.getElementById('deviceready');
var listeningElement = parentElement.querySelector('.listening');

You don't have a div with ID deviceready, so your parentElement will be null.

EDIT : I think you can remove this whole block since it's belong to the default cordova page layout when you create a new project :

// 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;');

Solution 2

I think the dom has not yet been loaded, and you try to make a selection so it returns you a null. try to move thoses lines outside the onDeviceReady()

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

Related videos on Youtube

Muhammad Haroon Iqbal
Author by

Muhammad Haroon Iqbal

I am a Programmer with 2.5 years of experience. Currently I am working as JavaScript and iOS Developer in IT company. I have also worked on web development, android, Adobe flash builder. I am a passionate developer.

Updated on July 20, 2022

Comments

  • Muhammad Haroon Iqbal
    Muhammad Haroon Iqbal almost 2 years

    I am using Cordova app in Visual Studio 2015. I have added a simple button which changes the color of background of app to red. but it is giving above mentioned error.

    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