Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.10.2011, 23:29
Аспирант
Отправить личное сообщение для trololo Посмотреть профиль Найти все сообщения от trololo
 
Регистрация: 07.04.2011
Сообщений: 46

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()"
Ответить с цитированием
  #2 (permalink)  
Старый 18.10.2011, 11:32
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

http://javascript.ru/tutorial/events/intro
Ответить с цитированием
  #3 (permalink)  
Старый 18.10.2011, 13:35
Аспирант
Отправить личное сообщение для trololo Посмотреть профиль Найти все сообщения от trololo
 
Регистрация: 07.04.2011
Сообщений: 46

тут дело не в обработчике. он ставится нормально и вызывается тоже нормально. если он объявлен отдельной функцией (или же из под объекта но только в опере). у меня проблема с тем что в ff не видно ob. и соответственно все его "методы". если уж решили помочь ссылкой на мануал, то будьте так любезны, вчитайтесь в первое сообщение и суть проблемы...
Ответить с цитированием
  #4 (permalink)  
Старый 18.10.2011, 13:39
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Обработчики событий так не назначаются, в дальнейшем ещё больше проблем оберёте. Если хотите, чтобы ваш скрипт заработал, будьте так любезны, прочитайте мануал и пишите правильно.

Никто не будет разбираться, почему не работает назначенный через жопу обработчик только потому, что вам лень прочитать, как надо правильно.
Ответить с цитированием
  #5 (permalink)  
Старый 18.10.2011, 17:09
Аспирант
Отправить личное сообщение для trololo Посмотреть профиль Найти все сообщения от trololo
 
Регистрация: 07.04.2011
Сообщений: 46

извините за дерзость и может грубость. уже почти неделю гугл мучаю. 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();
Ответить с цитированием
  #6 (permalink)  
Старый 18.10.2011, 17:16
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от trololo
// без разницы как я добавлял этот обработчик. будь то .onclick= или же .addEventListener( ... суть в другом
Должно работать, покажите, как вы делали.
Ответить с цитированием
  #7 (permalink)  
Старый 18.10.2011, 18:15
Аспирант
Отправить личное сообщение для trololo Посмотреть профиль Найти все сообщения от trololo
 
Регистрация: 07.04.2011
Сообщений: 46

вот, только-что тестил
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>
Ответить с цитированием
  #8 (permalink)  
Старый 18.10.2011, 20:44
Аспирант
Отправить личное сообщение для trololo Посмотреть профиль Найти все сообщения от trololo
 
Регистрация: 07.04.2011
Сообщений: 46

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();

шикарно?

Последний раз редактировалось trololo, 18.10.2011 в 20:58. Причина: это ппц
Ответить с цитированием
  #9 (permalink)  
Старый 20.10.2011, 14:07
Аспирант
Отправить личное сообщение для trololo Посмотреть профиль Найти все сообщения от trololo
 
Регистрация: 07.04.2011
Сообщений: 46

в общем проблема была в том что из 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)

это скорее всего единственное правильное решение..
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OnClick ячейки таблицы и ссылки в этой ячейке MasDen Javascript под браузер 2 30.06.2011 10:34
Создание события onclick? kerranswell Events/DOM/Window 31 09.05.2011 21:20
Как избавиться от каскадного onclick? GydruS Events/DOM/Window 2 24.02.2011 11:54
onclick и <object> MCTrane Общие вопросы Javascript 3 23.12.2010 23:33
Событие onClick avtor01 Events/DOM/Window 3 03.09.2009 18:01