Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Динамическое добавление обработчиков с параметрами.
 
 автор: Denis_Gorby   (15.03.2006 в 12:47)   письмо автору
 
 

Здравствуйте.

Как известно, на событие 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 и присваивает ей переданное значение).

Буду благодарен за любые советы и ссылки,
Денис

   
 
 автор: 12345   (15.03.2006 в 14:56)   письмо автору
 
   для: Denis_Gorby   (15.03.2006 в 12:47)
 

attachEvent (IE)
addEventListener (DOM)

или правильно обработчик написать-
[code]subscribeButton.onclick =function(){“ValidateForm(‘SubscribeGroup’); SendData(this)”;}/code]

   
 
 автор: Denis_Gorby   (15.03.2006 в 18:16)   письмо автору
 
   для: 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:34)   письмо автору
 
   для: Denis_Gorby   (15.03.2006 в 18:16)
 

Пока нашел только такой выход:

subscribeButton.onclick=function(){eval(“ValidateForm(‘SubscribeGroup’)”);}

Насколько подобное решение является "кошерным" ? Я в JavaScript небольшой специалист, пока не выработал чутье, что такое хорошо, а что такое плохо.

   
 
 автор: 12345   (15.03.2006 в 19:09)   письмо автору
 
   для: 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.

   
 
 автор: Denis_Gorby   (15.03.2006 в 19:27)   письмо автору
 
   для: 12345   (15.03.2006 в 19:09)
 

Большое спасибо, Вы мне очень помогли.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования