JSFiddle - React, Tailwind, and code Playground

by arcm111

HTML

<form enctype="multipart/form-data">
    <input type="file" id="file" name="file" onchange="(alert('yo'))"/>
</form>
<div>
    <input type="checkbox" id="checkbox">blabla</input>
</div>

<div style="width: 100px; height: 30px; background-color: #ff0000;" onclick="simulateClick('text')">
</div>

<div style="width: 100px; height: 30px; background-color: #0000ff;" onclick="fireEvent('file', 'click')">
</div>

CSS

#file{
    display: none;
}

JavaScript

function fireEvent(node, eventName) {
  // Make sure we use the ownerDocument from the provided node to avoid cross-window problems
  var doc;
    node = document.getElementById(node);
  if (node.ownerDocument) {
    doc = node.ownerDocument;
  } else if (node.nodeType == 9){
    // the node may be the document itself, nodeType 9 = DOCUMENT_NODE
    doc = node;
  } else {
    throw new Error("Invalid node passed to JSUtil.fireEvent: " + node.id);
  }

  if (node.fireEvent) {
    // IE-style
    var event = doc.createEventObject();
    event.synthetic = true; // allow detection of synthetic events
    node.fireEvent("on" + eventName, event);
  } else if (node.dispatchEvent) {
    // Gecko-style approach is much more difficult.
    var eventClass = "";

    // Different events have different event classes.
    // If this switch statement can't map an eventName to an eventClass,
    // the event firing is going to fail.
    switch (eventName) {
      case "click": // Dispatching of 'click' appears to not work correctly in Safari. Use 'mousedown' or 'mouseup' instead.
      case "mousedown":
      case "mouseup":
        eventClass = "MouseEvents";
        break;

      case "focus":
      case "change":
      case "blur":
      case "select":
        eventClass = "HTMLEvents";
        break;

      default:
        throw "JSUtil.fireEvent: Couldn't find an event class for event '" + eventName + "'.";
        break;
    }
    var event = doc.createEvent(eventClass);
    var bubbles = eventName == "change" ? false : true;  
    event.initEvent(eventName, bubbles, true); // All events created as bubbling and cancelable.

    event.synthetic = true; // allow detection of synthetic events
    node.dispatchEvent(event);
  }
}