[решено] Кроссброузерное создание обработчика события

Ответить
Аватара пользователя
benya

[решено] Кроссброузерное создание обработчика события

Сообщение benya »

Господа, есть следующий код:



Код:

Код: Выделить всё

<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
Аватара пользователя
Prisoner

Re: [решено] Кроссброузерное создание обработчика события

Сообщение Prisoner »

Для 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) });

Этот способ удобен тем, что объявив перед созданием анонимной функции некие нужные нам переменные, мы создаем "замыкание", грубо говоря, анонимная функция крутится в окружении этих переменных как объявленных глобально.
Аватара пользователя
Sham

Re: [решено] Кроссброузерное создание обработчика события

Сообщение Sham »

Для IE и такой вариант прокатит

HTML код:

Код: Выделить всё

var button = d.createElement('<input onclick=alert(123)>');
Ответить

Вернуться в «Вебмастеру»