Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Кроссброузерное создание обработчика события (http://forum.oszone.net/showthread.php?t=76465)

benya 20-12-2006 15:19 527109

[решено] Кроссброузерное создание обработчика события
 
Господа, есть следующий код:
Код:

<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) });
Этот способ удобен тем, что объявив перед созданием анонимной функции некие нужные нам переменные, мы создаем "замыкание", грубо говоря, анонимная функция крутится в окружении этих переменных как объявленных глобально.

Sham 21-12-2006 00:11 527314

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

var button = d.createElement('<input onclick=alert(123)>');

benya 21-12-2006 13:40 527511

Да, самое оно. Решено.


Время: 16:51.

Время: 16:51.
© OSzone.net 2001-