Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Как заставить событие сработать один раз (https://javascript.ru/forum/css-html/9456-kak-zastavit-sobytie-srabotat-odin-raz.html)

GRean 18.05.2010 07:44

Как заставить событие сработать один раз
 
Всем привет!

У меня есть страница, которая подгружает внешний word-документ.html
В вордовском документе есть ссылки, которые введут на закладки внутри этого документа. Все работает норм. Но на самой странице есть код, который проверяет размер документа по высоте.При первой загрузке он работает хорошо. Но если я нажимаю переход на ссылку внутри подгруженного документа, то js начинает постоянно срабатыват, тем самым увеличивая размеры самой страницы по высоте. Это видно по скроллу, который тянется вверх. Подскажите плииз, как избавиться от этого?

Вот пример.

сам код:
<script type="text/javascript">   
  
var timeout;   
  
function clickAction() {   
 
                 
    frameFitting();   
    var fr = document.getElementById('demo_frame').contentWindow.document.body.getElementsByTagName('a'); 
    //alert(mode); 
    //document.write(mode);

    for (var i=0; i<fr.length; i++) {   
        fr[i].onclick = function() {   
            clearInterval(timeout);   
            timeout = setInterval("frameFitting()",100);   
    
        }
    }
      
}   
  
function frameFitting() {
  
   
    document.getElementById('demo_frame').width = '560';   
    document.getElementById('demo_frame').height = document.getElementById('demo_frame').contentWindow.document.body.scrollHeight+50+'px';
 
    var h = document.getElementById('demo_frame').contentWindow.document.body.scrollHeight;
    
document.getElementById('demo_frame').height = h+'px';

}   
  
onload = clickAction;   
   
</script>   
</head>   
<body>   
<iframe src="text.html" id="demo_frame" align="center" scrolling="no" frameborder="0" marginheight="0" marginwidth="0"></iframe>

Skipp 18.05.2010 10:06

А зачем ты используешь setInterval ?

GRean 18.05.2010 11:36

Код не мой, я еще плохо знаю js, но я сам более внимательней посмотрел код, в нем много лишнего.
Упрощенный вариант и рабочий. Работает в IE, Opera, FF.
Самый простой способ узнать высоту документа для iframe.
<script type="text/javascript">   
  

function clickAction() {   


   document.getElementById('demo_frame').width = '560'; 
   document.getElementById('demo_frame').height;
   document.getElementById('demo_frame').contentWindow.document.body.scrollHeight;

   document.getElementById('demo_frame').width = '560';   
   document.getElementById('demo_frame').height = document.getElementById('demo_frame').contentWindow.document.body.scrollHeight;

      
}   
onload = clickAction;   
   
</script>   
 
<iframe src="docum6.html" id="demo_frame" align="center" scrolling="no" frameborder="0" marginheight="0" marginwidth="0"></iframe>

Gokusa 06.06.2010 23:26

ну поставь какой-нить "флажок"
я просто js тоже не шарю,лень разбираться в этих каляках.
ну обычно объявляют переменную,присваивают ей значение при неком событии,и уже смотрят по значению переменной состояние

JsLoveR 07.06.2010 00:29

Цитата:

Сообщение от Gokusa
ну поставь какой-нить "флажок"
я просто js тоже не шарю,лень разбираться в этих каляках.
ну обычно объявляют переменную,присваивают ей значение при неком событии,и уже смотрят по значению переменной состояние

:yes:


Часовой пояс GMT +3, время: 16:38.