Answers:
单击HTML元素:只需执行element.click()
。大多数主流浏览器都支持此功能。
要多次重复单击:将ID添加到元素以唯一地选择它:
<a href="#" target="_blank" id="my-link" onclick="javascript:Test('Test');">Google Chrome</a>
并.click()
通过for循环在JavaScript代码中调用该方法:
var link = document.getElementById('my-link');
for(var i = 0; i < 50; i++)
link.click();
for(
。
更新
这是一个老答案。现在,您只需使用click即可。对于更高级的事件触发,请使用dispatchEvent。
const body = document.body;
body.addEventListener('click', e => {
console.log('clicked body');
});
console.log('Using click()');
body.click();
console.log('Using dispatchEvent');
body.dispatchEvent(new Event('click'));
原始答案
这是我使用的:http : //jsfiddle.net/mendesjuan/rHMCy/4/
更新为可与IE9 +一起使用
/**
* Fire an event handler to the specified node. Event handlers can detect that the event was fired programatically
* by testing for a 'synthetic=true' property on the event object
* @param {HTMLNode} node The node to fire the event handler on.
* @param {String} eventName The name of the event without the "on" (e.g., "focus")
*/
function fireEvent(node, eventName) {
// Make sure we use the ownerDocument from the provided node to avoid cross-window problems
var doc;
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 fireEvent: " + node.id);
}
if (node.dispatchEvent) {
// Gecko-style approach (now the standard) takes more work
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 "fireEvent: Couldn't find an event class for event '" + eventName + "'.";
break;
}
var event = doc.createEvent(eventClass);
event.initEvent(eventName, true, true); // All events created as bubbling and cancelable.
event.synthetic = true; // allow detection of synthetic events
// The second parameter says go ahead with the default action
node.dispatchEvent(event, true);
} else if (node.fireEvent) {
// IE-old school style, you can drop this if you don't need to support IE8 and lower
var event = doc.createEventObject();
event.synthetic = true; // allow detection of synthetic events
node.fireEvent("on" + eventName, event);
}
};
请注意,调用fireEvent(inputField, 'change');
并不意味着它将实际更改输入字段。input.value="Something"
引发更改事件的典型用例是,当您以编程方式设置字段并希望事件处理程序被调用时,因为调用不会触发更改事件。
jQuery
)。如果您使用您尝试过但无法使用的确切代码提出一个新问题,我可以提供更有意义的帮助。
什么
l.onclick();
确实是在调用onclick
函数l
,也就是说,如果您已将设置为1 l.onclick = myFunction;
。如果您尚未设置l.onclick
,它什么都不做。相反,
l.click();
模拟点击并触发所有事件处理程序,无论是使用l.addEventHandler('click', myFunction);
,HTML还是其他方式添加的。
window
对象,则不会神奇地公开window.click
函数。
.click()
不适用于Android(请参阅移动部分的mozilla docs)。您可以使用以下方法触发click事件:
function fireClick(node){
if (document.createEvent) {
var evt = document.createEvent('MouseEvents');
evt.initEvent('click', true, false);
node.dispatchEvent(evt);
} else if (document.createEventObject) {
node.fireEvent('onclick') ;
} else if (typeof node.onclick == 'function') {
node.onclick();
}
}
从这篇文章
.click()
不适用于Android”实际上,最新表格显示“兼容性未知”。
使用测试框架
这可能会有所帮助-http ://seleniumhq.org/-Selenium是一个Web应用程序自动化测试系统。
您可以使用Firefox插件Selenium IDE创建测试
手动触发事件
要以正确的方式手动触发事件,您将需要针对不同的浏览器使用不同的方法- el.dispatchEvent
或将Anchor元素el.fireEvent
放在哪里el
。我相信这两个都需要构造一个Event对象来传递。
另一种并非完全正确的快捷方式是:
var el = document.getElementById('anchorelementid');
el.onclick(); // Not entirely correct because your event handler will be called
// without an Event object parameter.
IE9 +
function triggerEvent(el, type){
var e = document.createEvent('HTMLEvents');
e.initEvent(type, false, true);
el.dispatchEvent(e);
}
用法示例:
var el = document.querySelector('input[type="text"]');
triggerEvent(el, 'mousedown');
来源:https://plainjs.com/javascript/events/trigger-an-event-11/
合理警告:
element.onclick()
表现不符合预期。它仅在中运行代码onclick="" attribute
,而不会触发默认行为。
我遇到了类似的问题,即使onclick
自定义功能运行良好,单选按钮也未设置为选中状态。必须添加radio.checked = "true";
以进行设置。对于其他元素,可能也是如此(之后a.onclick()
还应该有window.location.href = "url";
)
onclick()
表示该event
对象不会由浏览器自动定义,因此类似的通用方法event.stopPropagation()
也将是未定义的。
请在任何位置点击按钮,然后调用触发功能。
<a href="#" id="myBtn" title="" >Button click </a>
function trigger(){
document.getElementById("myBtn").click();
}