Следующее не работает... (по крайней мере, не в Firefox: document.getElementById('linkid').click()
не функция),
<script type="text/javascript">
function doOnClick() {
document.getElementById('linkid').click();
//Should alert('/testlocation');
}
</script>
<a id="linkid" href="/testlocation" onclick="alert(this.href);">Testlink</a>
Вам необходимо применить
обработчик событий в контексте этого элемента:
var elem = document.getElementById("linkid");
if (typeof elem.onclick == "function") {
elem.onclick.apply(elem);
}
В противном случае this
будет ссылаться на контекст приведенный выше код выполняется в.
Чтобы вызвать событие, вы просто вызываете обработчик этого события элемент. Небольшое изменение в вашем коде.
var a = document.getElementById("element");
var evnt = a["onclick"];
if (typeof(evnt) == "function") {
evnt.call(a);
}
Если вы используете это только для ссылки на функцию в onclick, это кажется очень плохой идеей. В целом встроенные события - плохая идея.
Я бы посоветовал следующее:
function addEvent(elm, evType, fn, useCapture) {
if (elm.addEventListener) {
elm.addEventListener(evType, fn, useCapture);
return true;
}
else if (elm.attachEvent) {
var r = elm.attachEvent('on' + evType, fn);
return r;
}
else {
elm['on' + evType] = fn;
}
}
handler = function(){
showHref(el);
}
showHref = function(el) {
alert(el.href);
}
var el = document.getElementById('linkid');
addEvent(el, 'click', handler);
Если вы хотите вызвать ту же функцию из другого кода javascript, имитация щелчка для вызова функции - не лучший способ. Рассмотрим:
function doOnClick() {
showHref(document.getElementById('linkid'));
}