В общем и целом все оказалось не так просто.
При попытке заменить этот код topmenu = (function(window) { return { sub: function(elem,type,block) { try { try { elem.addEventListener(type, block, false); } catch(e) { elem.attachEvent("on"+type, block); } } catch(e){} } } }(window)); на topmenu = (function(window) { return { sub: function(elem,type,block) { elem["on"+type] = block; } } }(window)); elem is undefined Соответственно вопрос. Почему? И как можно решить эту проблему? Также остался вопрос по поводу change в attachevent. Очень надеюсь на Ваши знания и опыт уважаемые специалисты. |
platedz,
<script> topmenu = (function(window) { return { sub: function(elem,type,block) { elem["on"+type] = block; } } }(window)); alert(topmenu.sub.toString()) </script> <script> topmenu = (function(window) { return { sub: function(elem,type,block) { elem["on"+type] = block alert('elem[on'+type+']='+elem["on"+type]) } } }(window)); New_elem=[] topmenu.sub(New_elem,2,3) </script> elem, вводимый в функцию - должен быть заранее определён как массив (или определяйте внутри функции |
Спасибо за ответ. Честно говоря я не очень понял, при чем здесь массив. Вы наверное не верно поняли код. В вашем коде получается, что дожна произойти функция 3, при наступлении события 2, на элементе New_elem.
Вообще проблема была в том, что я возвращал через функцию элемент, что в общем то и должно было вызывать ошибку, учитывая, что элемент отсутствовал. Странно, что когда я не возвращал элемент, а исполнял на него функцию ошибки не происходило. |
Цитата:
elem["on"+type] Это где-то должно быть определено! (или в глобале или внутри функции |
Цитата:
если это не существенно то разницы нет |
Спасибо. В этом случае решил все-таки пока оставить addEventListener.
Жаль, что так и не удалось решить проблему с change в нем. Может кто-нибудь все-таки подскажет ответ. |
Цитата:
elem["on"+type] это тоже самое что и document.getElementById("id")["onclick"] Т.е. это способ обратиться к объекту. Насколько я понимаю, свойство onclick может быть только у объекта, а не у массива. При этом сам по себе объект уже определен как объект, наверное. |
Цитата:
document.getElementById("inpField").click(); document.getElementById("inpField").attachEvent(... местами-сначала назначаем обработчик-потом кликаем хотя если заменить на addEventListener-в хроме работает с первого раза и так Если не будет работать-то возможно проблема в безопасности-они считают что юзер сам должен кликнуть на кнопку-а не програмно это делать |
Часовой пояс GMT +3, время: 22:16. |