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, время: 06:51. |