Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.02.2008, 14:04
Александр
 
Сообщений: n/a

Изменение onClick из Javascript
Здравствуйте.

Подскажите, пожалуйста, как изменить обработчик события из javascript
Например, есть кнопка <input type="button" value="Button" onClick="javascript: window.alert('test');">
как изменить обработчик события onClick из самого javascript?

спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 23.02.2008, 16:54
Аватар для Phoenix
Профессор
Отправить личное сообщение для Phoenix Посмотреть профиль Найти все сообщения от Phoenix
 
Регистрация: 24.09.2007
Сообщений: 165

Вот код:
<script language="JavaScript" type="text/javascript">
function change_but(){
document.getElementById('test_but').onclick=function(){
alert('новая обработка');
}
}
</script>
<input type='button' value='Test' onClick="javascript: window.alert('test');" id='test_but'><br>
<input type='button' value='Change' onClick="change_but()">


П.С. Сначала нажимаешь на кнопку "Тест". Потом на "Чендж". И повторно на "Тест".
__________________
После каждой девятки все снова с нуля,
Все снова с нуля, но не сначала...
Ответить с цитированием
  #3 (permalink)  
Старый 17.03.2008, 13:57
Аспирант
Отправить личное сообщение для EugenyK Посмотреть профиль Найти все сообщения от EugenyK
 
Регистрация: 17.03.2008
Сообщений: 64

передача значений массива в переопределенный onClick
Здравствуйте.

Вопрос такой.
Есть функция openMenu, вызываемая при нажатии на картинку через onclick.

<!-- генерируется php-скриптом -->
<div class='item_main'>
     <img class='point' id='cat_img' src='{$this->img_path}plus.gif' alt='' onclick="openMenu(this.id,'{$this->img_path}','cat')" /> Каталог
</div>


при её вызове запускается JsHttpRequest запрос с передачей ему значения this.id, по которому на сервере формируется запрос к БД и в объекте javascript'а result появляется массив названий пунктов меню для данного this.id:

function openMenu(this_img_id, img_folder_path, next_div_id)
{
	...
        // получили массив result
        ...
        for(var i=0; i<result.length; i++)
	{
                // img1[i] - объект i-го изображения для каждого пункта меню
                img1[i] = document.createElement('img');
		img1[i].setAttribute('id',this_img_id+String(i));		
                // div1[i] - это блок, созданный для хранения i-го пункта меню
                // непринципиален
                div1[i].appendChild(img1[i]);
		
                 
                // вот тут надо определить событие onClick для появившихся кнопочек пунктов меню. Для этого нужно функции openSubMenu передать номер категории в БД и id для соответствующего этому номеру img-элемента, который будем открывать. 
                img1[i].onclick = function()
		{
                     openSubMenu(img1[i].id, result[i]['cat_id']);
		}					
		...	
}


Основная проблема в том, что при открытии пункта по openMenu появляются пункты меню и img[i]. Однако при клике по каждому img[i] вываливается в консоль ошибок сообщение как раз на строке, где описана функция openSubMenu(img1[i].id, result[i]['cat_id']):
--------
Ошибка: img1[i] has no properties
--------
Т.е. почему-то значение img1[i].id а также думаю и result[i]['cat_id'] не передаются как параметры в openSubMenu()

Однако если в качестве эксперимента написать в той строке
openSubMenu(img1[0].id, result[0]['cat_id']);
то первый пункт открывшегося по openMenu() меню будет открываться.

Как можно передать i-й элемент массива?

Заранее спасибо.
Ответить с цитированием
  #4 (permalink)  
Старый 17.03.2008, 14:27
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

EugenyK, почитайте про замыкания, и конкретно ваш случай
Ответить с цитированием
  #5 (permalink)  
Старый 17.03.2008, 14:59
Аспирант
Отправить личное сообщение для EugenyK Посмотреть профиль Найти все сообщения от EugenyK
 
Регистрация: 17.03.2008
Сообщений: 64

Сутки потратил на эту проблему.

Благодарствую!
Большое спасибо.
Ответить с цитированием
  #6 (permalink)  
Старый 01.05.2008, 16:44
Аспирант
Отправить личное сообщение для EugenyK Посмотреть профиль Найти все сообщения от EugenyK
 
Регистрация: 17.03.2008
Сообщений: 64

Такой вопрос по замыканиям:
Когда я созданную ветвь вместе с прикреплёнными к его сыновьям событиями onclick удаляю через removeChild(), события onckick ведь остаются? Как в данном случае избавляться от таких утечек памяти?
Ведь если у меня дерево подкаталогов будет большим и я несколько раз пооткрываю и позакрываю его, накопится нехилый стек мусора.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Лучшая книга по JavaScript Systemnik Оффтопик 27 26.08.2012 16:54
Современная книга по JavaScript twolf Оффтопик 18 21.02.2009 01:20
Обращение к именам, полученным через Javascript baal1988 Events/DOM/Window 1 31.08.2008 15:08
Нужен Старший разработчик JavaScript Yandex Работа 17 19.08.2008 16:43
Изменение имиджа по таймеру с помощью CSS и JavaScript Aimless Общие вопросы Javascript 10 15.08.2008 18:09