Bir öğeye tıklamayı simüle etmek için JavaScript'i nasıl kullanabileceğimi merak ediyorum.
Şu anda elimde:
<script type="text/javascript">
function simulateClick(control)
{
if (document.all)
{
control.click();
}
else
{
var evObj = document.createEvent('MouseEvents');
evObj.initMouseEvent('click', true, true, window, 1, 12, 345, 7, 220, false, false, true, false, 0, null );
control.dispatchEvent(evObj);
}
}
</script>
<a href="http://www.google.com" id="mytest1">test 1</a><br>
<script type="text/javascript">
simulateClick(document.getElementById('mytest1'));
</script>
Ama çalışmıyor :(
Bir fikrin var mı?
İşte hazırladığım şey. Oldukça basit ama işe yarıyor:
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);
}
}
Kullanım:
eventFire(document.getElementById('mytest1'), 'click');
En üstteki cevap en iyisidir! Ancak, etype = 'click'
olduğunda Firefox'ta benim için fare olaylarını tetiklemiyordu.
Bu yüzden, document.createEvent
ifadesini 'MouseEvents'
olarak değiştirdim ve bu sorunu çözdü. Ekstra kod, başka bir kod parçasının olaya müdahale edip etmediğini test etmek içindir ve iptal edilirse bunu konsola kaydederim.
function eventFire(el, etype){
if (el.fireEvent) {
el.fireEvent('on' + etype);
} else {
var evObj = document.createEvent('MouseEvents');
evObj.initEvent(etype, true, false);
var canceled = !el.dispatchEvent(evObj);
if (canceled) {
// A handler called preventDefault.
console.log("automatic click canceled");
} else {
// None of the handlers called preventDefault.
}
}
}