JSFiddle - React, Tailwind, and code Playground

HTML

<html>
    <body>
        <div>
        <input type="text" value="this is my text1" />
        <input type="text" value="this is my text2" />
        <input type="text" value="this is my text3" />
        </div>
        <div>
        <select>
            <option selected="selected">-- choose --</option>
            <option>my option1</option>
            <option>my option2</option>
            <option>my option2</option>
        </select>
    </div>
        <div>
        <a href="http://idg.se">idg.se</a>
        </div>
    </body>
</html>

JavaScript

var FormChangeListener = function(txt, saveClass) {
    if (!(this instanceof arguments.callee)) {
        throw new Error("Constructor called as a function");
    }
    var warningtext = txt || 'Changes are made. Do you want to navigate away from this page?',
        controleOnClass = saveClass || 'savecontrole';    
        isChanged = function() {           
            return dojo.query('.isChanged').length > 0;
    };
    
    this.setup = function(nodeSelector) {
        var selector = nodeSelector || 'input:not([type=button]):not([type=submit]), select';
        dojo.query(selector).onchange(function() {
            if (!dojo.hasClass(this, 'isChanged')) {
                dojo.addClass(this, 'isChanged');
            }
        });
        
        //borde funkat med dojo.addOnUnLoad() men nej...
        window.onbeforeunload = function() {
            if (isChanged()) {
                return warningtext;
            }
            
        };
    };
};

dojo.addOnLoad(function() {
    var f = new FormChangeListener();
    f.setup();
});