The fact is that, unlike a simple function call, events have phases of ascent or tunneling (in this case only ascent). Therefore, it is not enough to cause a simple execution of a function, as it is done with click() , since higher levels may still have interceptors.
Found the answer: http://darktalker.com/2010/07/manually-trigger-dom-event/
/** * trigger a DOM event via script * @param {Object,String} element a DOM node/node id * @param {String} event a given event to be fired - click,dblclick,mousedown,etc. */ var fireEvent = function(element, event) { var evt; var isString = function(it) { return typeof it == "string" || it instanceof String; } element = (isString(element)) ? document.getElementById(element) : element; if (document.createEventObject) { // dispatch for IE evt = document.createEventObject(); return element.fireEvent('on' + event, evt) } else { // dispatch for firefox + others evt = document.createEvent("HTMLEvents"); evt.initEvent(event, true, true); // event type,bubbling,cancelable return !element.dispatchEvent(evt); } }
This code already causes the event to run fully, along with the ascent phase.
Example:
var fireEvent = function(element, event) { var evt; var isString = function(it) { return typeof it == "string" || it instanceof String; } element = (isString(element)) ? document.getElementById(element) : element; if (document.createEventObject) { // dispatch for IE evt = document.createEventObject(); return element.fireEvent('on' + event, evt) } else { // dispatch for firefox + others evt = document.createEvent("HTMLEvents"); evt.initEvent(event, true, true); // event type,bubbling,cancelable return !element.dispatchEvent(evt); } } $(document).ready(function(){ $("td").click(function(){ $(this).toggleClass("red"); }); $("table").click(function(){ $(this).toggleClass("blue"); }); // Trigger the event. fireEvent($("td")[0], 'click'); });
td{ padding:30px; border:1px solid #000; } .red{ background:red; } .blue{ background:blue; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table> <tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </table>
fireEvent(new MouseEvent(...))in JavaFX? or in javascriptevent.initMouseEvent(...)? - Sergey