is not defined onclick()
извините что дублирую темы, но возможно я изначально создал не в той ветке.
var ob={ ctor:function() { //some start actions }, someAction:function(param p) { //some action }, anotherAction:function() { //here is must be code from first message... document.getElementById('someId').setAttribute('onclick','ob.someAction(1)'); }, /*few methods and vars .... */ } window.load=ob.ctor(); тоесть вешаем некую функцию из этого же "объекта" на нужный элемент. в опере такое прокатывает. в ff firebug говорит "ob is not defined onclick()" |
|
тут дело не в обработчике. он ставится нормально и вызывается тоже нормально. если он объявлен отдельной функцией (или же из под объекта но только в опере). у меня проблема с тем что в ff не видно ob. и соответственно все его "методы". если уж решили помочь ссылкой на мануал, то будьте так любезны, вчитайтесь в первое сообщение и суть проблемы...
|
Обработчики событий так не назначаются, в дальнейшем ещё больше проблем оберёте. Если хотите, чтобы ваш скрипт заработал, будьте так любезны, прочитайте мануал и пишите правильно.
Никто не будет разбираться, почему не работает назначенный через жопу обработчик только потому, что вам лень прочитать, как надо правильно. |
извините за дерзость и может грубость. уже почти неделю гугл мучаю. ff меня не понимает ну никак. попробую объяснить ситуацию ещё раз. создаю userjs в котором код выглядит примерно следующим образом
var someObj={ ctor:function() { this.somemethod(); }, somemethod:function(){ document.getElementById('someid').setAttribute('onclick','someObj.action()'); // без разницы как я добавлял этот обработчик. будь то .onclick= или же .addEventListener( ... суть в другом }, action:function(){alert('hello world!11');} } // в опере работает следующий вариант window.load=someObj.ctor(); // в ff по клику на элемент someid c обработчиком onclick в котором вызывается action из someObj, ff (а точнее firebug) говорит что someObj не обявлен. // пробовал так var someVar=someObj; window.load=someVar.ctor() // в обработчике onclick всё того же элемента указывая на обявленую someVar вместо someObj, ситуация не изменилась - someVar is not defined блин... // даже извращался так var someScript=document.createElement('script'); someScript.type="text/javascript"; somwScript.innerHTML='var sss=someObj;window.load=sss.init();'; document.getElementsByTagName('head')[0].appendChild(someScript); // в этом случае userjs не загружался вообще. кроме части где в шапку добавляется <script> и это так не работает только если делать userjs, если же просто ставить весь этот код в страницу то работает даже просто через window.load=someObj.ctor(); |
Цитата:
|
вот, только-что тестил
userjs который ставим через Greasemonkey // ==UserScript== // @name someName // @namespace someFunctions // @include * // ==/UserScript== var someObj={ ctor:function() { this.somemethod(); }, somemethod:function(){ //document.getElementById('someid').setAttribute('onclick','someObj.action()'); // someObj is not defined //document.getElementById('someid').addEventListener('click','someObj.action',false); // ноль реакции, даже ошибок нет //document.getElementById('someid').onclick=someObj.action; // так же ноль реакции //document.getElementById('someid').onclick=function(){someObj.action();} // снова нет реакции. someObj.action также, и даже просто alert('test') как бы говорит о том что таким способом onclick не по вешать, хотя по фен-шую вроде.. //document.getElementById('someid').onclick=someObj.action(); // не дожидаясь события onclick вызывается action сразу по загрузке документа. тут удивляться не приходится.. }, action:function(){alert('hello world!11');} } window.load=someObj.ctor(); страница на которой тестим <html> <head><title>some page</title> </head> <body> <div id="someid">make some action</div> </body> </html> |
ff меня окончательно добил. это даже заслуга не ff а этого проклятого плагина greasemonkey скорее всего. секьюрность на высоте, да такая что прямо я в шоке. даже если делать так
function h() { document.getElementsByTagName('body')[0].innerHTML+='<script src="http://someserver.com/somescript.js"></script>'; } window.onload=h(); ff его цепляет на страницу но вот не как js не выполняется. и даже так function h() { document.getElementsByTagName('body')[0].innerHTML+='<script>alert("some text")</script>'; } window.onload=h(); firebug показывает что в исходном коде оно есть. но alert не срабатывает.. ------ вот так работает. // ==UserScript== // @name someName // @namespace someFunctions // @include * // ==/UserScript== var someObj={ ctor:function() { //alert(var_dump(this)); this.somemethod(); }, somemethod:function(){ document.getElementById('someid').setAttribute('onclick','someObj.action()'); }, myself:function(){ var out = ''; for (var i in this) { out += i + ": " + this[i] + ','; } return 'var someObj={'+out+'}; someObj.ctor();'; }, action:function(){alert('hello world!11');}, create:function(){ var someVar=document.createElement('script'); someVar.innerHTML=this.myself(); document.getElementsByTagName('body')[0].appendChild(someVar) } } window.onload=someObj.create(); шикарно? :D |
в общем проблема была в том что из dom нельзя было добраться до скрипта из greasemonkey. по-этому и ррешилась проблема копированием кода прямо в dom. в опере по умолчанию userjs располагаются в глобальном window а в ff нет. решение нужно было искать не на форуме о js а на форумах ff..
var w=(typeof unsafeWindow=='undefined')?window:unsafeWindow; w.someObj=someObj; w.addEventListener('load',function(){w.someObj.ctor()},false) это скорее всего единственное правильное решение.. |
Часовой пояс GMT +3, время: 16:22. |