Изменение onClick из Javascript
Здравствуйте.
Подскажите, пожалуйста, как изменить обработчик события из javascript Например, есть кнопка <input type="button" value="Button" onClick="javascript: window.alert('test');"> как изменить обработчик события onClick из самого javascript? спасибо! |
Вот код:
<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()"> П.С. Сначала нажимаешь на кнопку "Тест". Потом на "Чендж". И повторно на "Тест". |
передача значений массива в переопределенный 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-й элемент массива? Заранее спасибо. |
EugenyK, почитайте про замыкания, и конкретно ваш случай
|
Сутки потратил на эту проблему.
Благодарствую! Большое спасибо. |
Такой вопрос по замыканиям:
Когда я созданную ветвь вместе с прикреплёнными к его сыновьям событиями onclick удаляю через removeChild(), события onckick ведь остаются? Как в данном случае избавляться от таких утечек памяти? Ведь если у меня дерево подкаталогов будет большим и я несколько раз пооткрываю и позакрываю его, накопится нехилый стек мусора. |
Часовой пояс GMT +3, время: 02:48. |