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를 사용하여 마우스 클릭 이벤트를 시작하려면 어떻게합니까?
답변
(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
}
다음과 같이 사용할 수 있습니다.
simulate(document.getElementById("btn"), "click");
세 번째 매개 변수로 ‘옵션’을 전달할 수 있습니다. 지정하지 않은 옵션은 defaultOptions에서 가져옵니다 (스크립트 하단 참조). 예를 들어 마우스 좌표를 지정하려면 다음과 같이 할 수 있습니다.
simulate(document.getElementById("btn"), "click", { pointerX: 123, pointerY: 321 })
유사한 방법을 사용하여 다른 기본 옵션을 재정의 할 수 있습니다.
답변
다음은 대상 요소에서 클릭 (또는 마우스 이벤트)을 시뮬레이션하는 순수한 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등의 개최가 기반으로 받아들이는 옵션 MouseEvent는 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);
답변
MDN (Mozilla Developer Network) 문서에서 HTMLElement.click () 이 찾고 있습니다. 여기 에서 더 많은 이벤트를 찾을 수 있습니다 .
답변
데릭의 답변을 바탕으로
document.getElementById('testTarget')
.dispatchEvent(new MouseEvent('click', {shiftKey: true}))
키 수정 자에서도 예상대로 작동합니다. 그리고 이것은 내가 볼 수있는 한 더 이상 사용되지 않는 API가 아닙니다. 이 페이지에서도 확인할 수 있습니다 .
답변
elementFromPoint 를 사용할 수 있습니다 .
document.elementFromPoint(x, y);
모든 브라우저에서 지원됩니다 : https://caniuse.com/#feat=element-from-point
답변
자바 스크립트 코드
//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>