-
Вебмастеру
(
http://forum.oszone.net/forumdisplay.php?f=22)
[решено] Кроссброузерное создание обработчика события
Господа, есть следующий код:
Код:
<script language="JavaScript" type="text/javascript">
<!--
var d = document;
function create_form(id) {
var ph_comm = d.getElementById('ph_comm');
var button = d.createElement('input');
button.setAttribute('name','button');
button.setAttribute('type','button');
button.setAttribute('value','Отправить');
button.setAttribute('onclick','alert(123)');
button.className = 'lang_link';
ph_comm.appendChild(button);
}
//-->
</script>
<A class=lang_link onclick="create_form(); return false;" href="javascript:void(0);">Создать кнопку</A>
<div id="ph_comm"></div>
Делает следующее: при нажати на ссылку "Создать кнопку" - создается кнопка средствами DOM с параметром onclick при нажатии на эту кнопку должен саботать код alert(123)
Не пойму почему не срабатывает событие (!)
Интересно что в Firefox - срабатывает.
P.S. IE 6.0 SP2
|
vadimiron |
20-12-2006 18:09 527182 |
A
Код:
javascript:alert('123')
?
|
Prisoner |
20-12-2006 20:00 527213 |
Для IE потребуется что-то в роде:
Код:
button.onclick = new Function('evt', 'alert(123)');
Однако лучше, имхо, использовать уже готовое решение
Код:
function addEvent(elt, name, handler, atEnd)
{
name = name.replace(/^(on)?/, 'on');
var prev = elt[name];
var tmp = '__tmp';
elt[name] = function(e) {
if (!e) e = window.event;
var result;
if (!atEnd) {
elt[tmp] = handler;
result = elt[tmp](e);
elt[tmp] = null; // delete() does not work in IE 5.0 (???!!!)
if (result === false) return result;
}
if (prev) {
elt[tmp] = prev; result = elt[tmp](e); elt[tmp] = null;
}
if (atEnd && result !== false) {
elt[tmp] = handler; result = elt[tmp](e); elt[tmp] = null;
}
return result;
}
return handler;
}
следующим, примерно, образом:
Код:
addEvent(button, 'onclick', function(e) { alert(123) });
Этот способ удобен тем, что объявив перед созданием анонимной функции некие нужные нам переменные, мы создаем "замыкание", грубо говоря, анонимная функция крутится в окружении этих переменных как объявленных глобально.
|
Для IE и такой вариант прокатит
HTML код:
var button = d.createElement('<input onclick=alert(123)>');
|
Время: 16:51.
© OSzone.net 2001-