JSFiddle - React, Tailwind, and code Playground

HTML

<input type="checkbox" name="check">
<input type="button" onclick="manual_click();" value="Check">

JavaScript

if (!Object.prototype.watch)
    Object.prototype.watch = function (prop, handler) {
        var oldval = this[prop], newval = oldval,
        getter = function () {
            return newval;
        },
        setter = function (val) {
            oldval = newval;
            return newval = handler.call(this, prop, oldval, val);
        };
        if (delete this[prop]) { // can't watch constants
            if (Object.defineProperty) // ECMAScript 5
                Object.defineProperty(this, prop, {
                    get: getter,
                    set: setter
                });
            else if (Object.prototype.__defineGetter__ && Object.prototype.__defineSetter__) { // legacy
                Object.prototype.__defineGetter__.call(this, prop, getter);
                Object.prototype.__defineSetter__.call(this, prop, setter);
            }
        }
    };

function manual_click() {
    $("input[name='check']").prop('checked', true);
}

$(document).ready(function(){
    $("input[name='check']").on('change', function(){
        alert('check');
    });
    
    $("input[name='check']").get(0).watch('checked', function() {
        alert('check watched');
    });
});