Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: setInterval и обьекты
 
 автор: Fear.86   (29.03.2007 в 19:32)   письмо автору
 
 

Всем привет, в общем цель такова:


var Object=document.getElementById('ID');
var timer = setInterval("myFunction(Object)", 100);

function myFunction(elem){
              alert(elem.id);
}


или


var Object=document.getElementById('ID');
var timer = setInterval("myFunction("+Object+")", 100);

function myFunction(elem){
              alert(elem.id);
}


И конечно-же ничего не происходит ( хорошего ) :-(

Как передать обьект в функцию с использованием setInterval или setTimeOut ?

   
 
 автор: 12345   (29.03.2007 в 19:41)   письмо автору
 
   для: Fear.86   (29.03.2007 в 19:32)
 

А не называйте объекты ключевыми словами, и второе пойдёт.

   
 
 автор: Fear.86   (29.03.2007 в 19:44)   письмо автору
 
   для: 12345   (29.03.2007 в 19:41)
 

Блин это пример!
а вот второй не катит...

   
 
 автор: Fear.86   (29.03.2007 в 19:50)   письмо автору
 
   для: Fear.86   (29.03.2007 в 19:44)
 

все нашел решение :-)

на Onload :


function Load(){
Function.prototype.bind = function(object) {
    var method = this;
    return function() {
        return method.apply(object, arguments) 
    }
}
}


в скрипте :


var Object=document.getElementById('ID');
var timer = setInterval(myFunction.bind(Object), 100);

function myFunction(){
              alert(this.id);

   
 
 автор: CNT   (29.03.2007 в 20:48)   письмо автору
 
   для: Fear.86   (29.03.2007 в 19:50)
 

setInterval (всё что здесь написано, должно быть ГЛОБАЛЬНЫМ, time);

setTimeout (всё что здесь написано, должно быть ГЛОБАЛЬНЫМ, time);


И неважно, что это - переменная, либо имя функции... должно быть глобальным, т.е. определённым вне функций.
Тогда и будет работать.

   
 
 автор: 12345   (30.03.2007 в 12:31)   письмо автору
 
   для: CNT   (29.03.2007 в 20:48)
 

Или определено в функции, но без var.

Да, не второй, а первый пример, если не писать ключевое слово на месте переменной.

Object1=document.getElementById('ID'); 
var timer = setInterval("myFunction(Object1)", 100); 

function myFunction(elem){ 
              alert(elem.id); 

   
 
 автор: Fear.86   (30.03.2007 в 13:19)   письмо автору
 
   для: 12345   (30.03.2007 в 12:31)
 

12345

Интересно а вы пробовали это использовать ?

И глобалны вариант тоже не катит, функция создается и фызывается в нутри функциии, я уже не говорю про рекурсивный вызов функции чере определенный период времени, к тому-же зачем ломать голову ведь я уже написал на 100% рабочий вариант...

   
 
 автор: 12345   (30.03.2007 в 14:09)   письмо автору
 
   для: Fear.86   (30.03.2007 в 13:19)
 

Не пробовал, а какие могут быть проблемы?
Вот попробовал, работает:

<script>
onload=function(){o1=document.getElementById('id1');  
 var timer=setInterval("ff(o1)", 2000);  
}
function ff(elem){ alert(elem.id);}
</script>
<div id=id1>123</div>
var o1, естественно, не будет. Да и "var timer=" можно опустить, так как теряет смысл внутри функции.

Смысл в том, чтобы знать принципы, а не быть привязанным ко множеству случайных примеров. В Вашем примере есть некоторое излишество - непонятно, откуда это bind взялось.

А, понял, это 2 куска 1 примера. Так вот, тот первый кусок - излишество; работает, как видите, без него. Но к конкретной задаче может что угодно понадобиться.

   
 
 автор: Fear.86   (30.03.2007 в 16:53)   письмо автору
 
   для: 12345   (30.03.2007 в 14:09)
 

Работает относительно нориально, но есть проблема: таким образом у вас о1 обьявляется глобальной переменной, а это не есть гуд... так как переменная должна быть локальная иначе с ума можно сойти обзывая все переменные разными именами, избегая перекрытия с другой функцией, но всеравно спасибо полезная информация :-)

   
 
 автор: 12345   (30.03.2007 в 21:51)   письмо автору
 
   для: Fear.86   (30.03.2007 в 16:53)
 

Jyb в любом случае должны быть глобальными для существования между функциями. Свойство объекта - тоже глобальное в этом смысле. Что использовать - дело вкуса и сложности проекта.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования