Как имитировать щелчок мыши с помощью JavaScript?
Я знаю, о document.form.button.click() метод. Однако, я хотел бы знать, как имитировать событие onclick.
Я нашел этот код где-то здесь, на переполнение стека, но я не знаю как ей пользоваться :(
function contextMenuClick()
{
var element= 'button'
var evt = element.ownerDocument.createEvent('MouseEvents');
evt.initMouseEvent('contextmenu', true, true,
element.ownerDocument.defaultView, 1, 0, 0, 0, 0, false,
false, false, false, 1, null);
element.dispatchEvent(evt);
}
Как запустить событие щелчка мыши с помощью JavaScript?
6 ответов:
(модифицированная версия, чтобы заставить его работать без прототипа.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 }вы можете использовать его как это:
simulate(document.getElementById("btn"), "click");обратите внимание, что в качестве третьего параметра можно пройти в "настройки". Параметры, которые вы не указываете, взяты из defaultOptions (см. Нижнюю часть сценария). Поэтому, если вы, например, хотите указать координаты мыши, вы можете сделать что-то вроде:
simulate(document.getElementById("btn"), "click", { pointerX: 123, pointerY: 321 })вы можете использовать аналогичный подход, чтобы переопределить параметры по умолчанию.
кредиты надо идти в kangax. здесьисходный источник (прототип.js specific).
вот чистая функция JavaScript, которая будет имитировать щелчок (или любое событие мыши) на целевом элементе:
function simulatedClick(target, options) { var event = target.ownerDocument.createEvent('MouseEvents'), options = options || {}, opts = { // These are the default values, set up for un-modified left clicks type: 'click', canBubble: true, cancelable: true, view: target.ownerDocument.defaultView, detail: 1, screenX: 0, //The coordinates within the entire page screenY: 0, clientX: 0, //The coordinates within the viewport clientY: 0, ctrlKey: false, altKey: false, shiftKey: false, metaKey: false, //I *think* 'meta' is 'Cmd/Apple' on Mac, and 'Windows key' on Win. Not sure, though! button: 0, //0 = left, 1 = middle, 2 = right relatedTarget: null, }; //Merge the options with the defaults for (var key in options) { if (options.hasOwnProperty(key)) { opts[key] = options[key]; } } //Pass in the options event.initMouseEvent( opts.type, opts.canBubble, opts.cancelable, opts.view, opts.detail, opts.screenX, opts.screenY, opts.clientX, opts.clientY, opts.ctrlKey, opts.altKey, opts.shiftKey, opts.metaKey, opts.button, opts.relatedTarget ); //Fire the event target.dispatchEvent(event); }вот рабочий пример:http://www.spookandpuff.com/examples/clickSimulation.html
можно имитировать щелчок на любом элементе DOM. Что-то вроде
simulatedClick(document.getElementById('yourButtonId'))будет работать.вы можете передать объект в
optionsчтобы переопределить значения по умолчанию (чтобы имитировать, какую кнопку мыши вы хотите, будь то Shift/ Alt/Ctrl проводятся, и т. д. Параметры, которые он принимает, основаны на MouseEvents API.Я тестировал в Firefox, Safari и Chrome. Internet Explorer может потребоваться специальное лечение, я не уверен.
легче и более стандартные способ имитировать щелчок мыши будет непосредственно с помощью событие конструктора чтобы создать событие и отправить его.
хотя
MouseEvent.initMouseEvent()метод сохраняется для обратной совместимости, создание объекта mouseevent должно быть сделано с помощьюMouseEvent()конструктор.var evt = new MouseEvent("click", { view: window, bubbles: true, cancelable: true, clientX: 20, /* whatever properties you want to give it */ }); targetElement.dispatchEvent(evt);демо: http://jsfiddle.net/DerekL/932wyok6/
это работает на всех современных браузерах. Для старых браузеров, включая IE,
MouseEvent.initMouseEventпридется использовать, к сожалению, хотя это устарело.var evt = document.createEvent("MouseEvents"); evt.initMouseEvent("click", canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget); targetElement.dispatchEvent(evt);
из документации Mozilla Developer Network (MDN),HTMLElement.нажмите () это то, что вы ищете. Вы можете узнать больше событий здесь.
основываясь на ответе Дерека, я проверил, что
document.getElementById('testTarget') .dispatchEvent(new MouseEvent('click', {shiftKey: true}))работает, как ожидалось, даже с помощью клавиш-модификаторов. И это не устаревший API, насколько я могу видеть. Вы можете проверьте на этой странице, а также.
Код JavaScript
//this function is used to fire click event function eventFire(el, etype){ if (el.fireEvent) { el.fireEvent('on' + etype); } else { var evObj = document.createEvent('Events'); evObj.initEvent(etype, true, false); el.dispatchEvent(evObj); } } function showPdf(){ eventFire(document.getElementById('picToClick'), 'click'); }HTML-код
<img id="picToClick" data-toggle="modal" data-target="#pdfModal" src="img/Adobe-icon.png" ng-hide="1===1"> <button onclick="showPdf()">Click me</button>
Comments