|
|
|
| Здравствуйте.
Как известно, на событие OnClick любой кнопки можно повесить пару обработчиков с параметрами, например:
<input id="SubscribeButton" type="button" value="button" onclick="ValidateForm(‘SubscribeGroup’); SendData(this)” />
Это делается легко и просто при верстке страницы. А можно ли назначить эти два обработчика динамически созданной кнопке?
var subscribeButton = document.createElement('INPUT');
subscribeButton type = 'button';
subscribeButton.id = ' SubscribeButton’;
subscribeButton.name = ' SubscribeButton’;
subscribeButton.value = 'Subscribe';
subscribeButton.onclick = <Нужные мне обработчкики>
Простое присвоение вроде
subscribeButton.onclick = “ValidateForm(‘SubscribeGroup’); SendData(this)”;
не работает в IE (просто преобразует onclick в переменную типа string и присваивает ей переданное значение).
Буду благодарен за любые советы и ссылки,
Денис | |
|
|
|
|
|
|
|
для: Denis_Gorby
(15.03.2006 в 12:47)
| | attachEvent (IE)
addEventListener (DOM)
или правильно обработчик написать-
[code]subscribeButton.onclick =function(){“ValidateForm(‘SubscribeGroup’); SendData(this)”;}/code] | |
|
|
|
|
|
|
|
для: 12345
(15.03.2006 в 14:56)
| | >или правильно обработчик написать-
>[code]subscribeButton.onclick=function(){“ValidateForm(‘SubscribeGroup’)”;}/code]
Спасибо, это почти то, что нужно.
Только есть проблема: вот этот код:
subscribeButton.onclick=function(){“ValidateForm(‘SubscribeGroup’)”;}
не работает, то есть ValidateForm не вызывается. Работает только так:
subscribeButton.onclick=function(){ValidateForm(‘SubscribeGroup’);}
то есть без ковычек. А мне нужно текст обработчика хранить именно в строке. Можно это как-то решить?
Заранее спасибо,
Денис. | |
|
|
|
|
|
|
|
для: Denis_Gorby
(15.03.2006 в 18:16)
| | Пока нашел только такой выход:
subscribeButton.onclick=function(){eval(“ValidateForm(‘SubscribeGroup’)”);}
Насколько подобное решение является "кошерным" ? Я в JavaScript небольшой специалист, пока не выработал чутье, что такое хорошо, а что такое плохо. | |
|
|
|
|
|
|
|
для: Denis_Gorby
(15.03.2006 в 18:34)
| | Именно так и делается, если функция вызывается через строку.
Есть, правда ещё одно, самое правоверное решение, через определение функции
subscribeButton.onclick=new Function([param1[,...paramN], "statement1[; ...statement2"])
Но про них сказано (в библии от примерно 2001-2002 года):
> Function-объекты, созданные конструктором Function,
> вычисляются каждый раз, когда используются.
> Это менее эффективно, чем объявление функции
> и вызов её в Вашем коде, поскольку объявленные
> функции компилируются.
Так что еесли современные браузеры не противоречат старой вере, eval и new Function будет примерно одно и то же.
subscribeButton.onclick=new Function(“ValidateForm(‘SubscribeGroup’);”}
Да оно и понятно почему - вы можете сменять определения динамически, как и при eval. | |
|
|
|
|
|
|
|
для: 12345
(15.03.2006 в 19:09)
| | Большое спасибо, Вы мне очень помогли. | |
|
|
|