ページにハイパーリンクがあります。テスト目的で、ハイパーリンクのクリック数を自動化しようとしています。JavaScriptを使用してハイパーリンクの50クリックをシミュレートする方法はありますか?
<a href="#" target="_blank" onclick="javascript:Test("Test");">MSDN</a>
JavaScriptからのonClickイベントトリガーを探しています。
ページにハイパーリンクがあります。テスト目的で、ハイパーリンクのクリック数を自動化しようとしています。JavaScriptを使用してハイパーリンクの50クリックをシミュレートする方法はありますか?
<a href="#" target="_blank" onclick="javascript:Test("Test");">MSDN</a>
JavaScriptからのonClickイベントトリガーを探しています。
回答:
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();
doesはのonclick
関数を正確に呼び出すことですl
。つまり、で関数を設定した場合ですl.onclick = myFunction;
。を設定していない場合、何も行われl.onclick
ません。対照的に、
l.click();
l.addEventHandler('click', myFunction);
で、HTMLで、またはその他の方法で追加されたかどうかにかかわらず、クリックをシミュレートしてすべてのイベントハンドラーを起動します。
window
オブジェクトにクリックイベントを追加しても、window.click
関数が魔法のように公開されることはありません。
.click()
Androidでは動作しません(モバイルセクションのmozilla docsをご覧ください)。このメソッドでクリックイベントをトリガーできます。
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
またはあなたのアンカー要素となります。これらの両方で渡すには、Eventオブジェクトを作成する必要があると思います。el.fireEvent
el
完全に正しいわけではない代替の迅速で汚い方法は、次のようになります。
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()
も未定義になります。