(Version modifiée pour que cela fonctionne sans prototype.js)
function simulate(element, eventName)
{
var options = extend(defaultOptions, arguments[2] || {});
var oEvent, eventType = null;
for (var name in eventMatchers)
{
if (eventMatchers[name].test(eventName)) { eventType = name; break; }
}
if (!eventType)
throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported');
if (document.createEvent)
{
oEvent = document.createEvent(eventType);
if (eventType == 'HTMLEvents')
{
oEvent.initEvent(eventName, options.bubbles, options.cancelable);
}
else
{
oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView,
options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY,
options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element);
}
element.dispatchEvent(oEvent);
}
else
{
options.clientX = options.pointerX;
options.clientY = options.pointerY;
var evt = document.createEventObject();
oEvent = extend(evt, options);
element.fireEvent('on' + eventName, oEvent);
}
return element;
}
function extend(destination, source) {
for (var property in source)
destination[property] = source[property];
return destination;
}
var eventMatchers = {
'HTMLEvents': /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,
'MouseEvents': /^(?:click|dblclick|mouse(?:down|up|over|move|out))$/
}
var defaultOptions = {
pointerX: 0,
pointerY: 0,
button: 0,
ctrlKey: false,
altKey: false,
shiftKey: false,
metaKey: false,
bubbles: true,
cancelable: true
}
Vous pouvez l'utiliser comme ceci :
simulate(document.getElementById("btn"), "click");
Notez qu'en tant que troisième paramètre, vous pouvez passer des "options". Les options que vous ne spécifiez pas sont prises dans les options par défaut (voir le bas du script). Donc si vous voulez par exemple spécifier les coordonnées de la souris, vous pouvez faire quelque chose comme :
simulate(document.getElementById("btn"), "click", { pointerX: 123, pointerY: 321 })
Vous pouvez utiliser une approche similaire pour remplacer d'autres options par défaut.
Les crédits doivent aller à kangax . Aquí C'est la source originale (spécifique au prototype.js).
3 votes
Qu'essayez-vous d'atteindre en agissant ainsi ?
0 votes
@Nok Imchen - Pourriez-vous fournir un lien vers la question originale d'où vous avez tiré le code ?
0 votes
@Eric, c'est la même chose que le lien donné ci-dessous
0 votes
@jared, voici le lien stackoverflow.com/questions/433919/