2009-09-23 13 views
18

jestem otwarcia iframe w JavaScript:Poczekaj na załadowanie iframe w JavaScript

righttop.location = "timesheet_notes.php"; 

a następnie chce przekazać informacje do niego:

righttop.document.notesform.ID_client.value = Client; 

Oczywiście jednak, że linia nie będzie działać, dopóki strona nie zostanie w pełni załadowana w elemencie iframe, a ten element formularza zostanie zapisany.

Jaki jest najlepszy/najbardziej skuteczny sposób rozwiązania tego problemu? Jakiś rodzaj pętli limitu czasu? Idealnie chciałbym zachować wszystko zawarte w tym konkretnym skrypcie, a nie dodawać żadnych dodatkowych rzeczy do strony, która jest otwierana.

Odpowiedz

40

Po pierwsze uważam, że należy wpływać na właściwość elementów iframe o wartości src, a nie location. Po drugie, zaczepić iframe load zdarzenie, aby wykonać zmiany:

var myIframe = document.getElementById('righttop'); 
myIframe.addEventListener("load", function() { 
    this.contentWindow.document.notesform.ID_client.value = Client; 
}); 
myIframe.src = 'timesheet_notes.php'; 

Ponownie, to wszystko przypuszczenia znaczy í ramę, a nie ramek.

+0

Dzięki Crescentfresh - to jest absolutnie czego szukałem; prosty, elegancki i działa naiwnie! :-) –

+0

Czy jest jakiś sposób, aby to zrobić, dołączając wydarzenie? Załóżmy, że element iframe może mieć własne procedury obsługi plików onload i nie chcę ich przypadkowo przeplatać przez ponowne przypisanie właściwości onload. –

+1

@Eric: yes. Użyj biblioteki takiej jak Mootools, Prototype 1.6 lub jQuery. Jeśli nie masz jednego z nich, użyj tego: http://ejohn.org/blog/flexible-javascript-events/ –

4

Domyślam się, że można to łatwo zrobić za pomocą jQuery ... jQuery Home Po prostu podłącz stronę do jQuery $ function() ... np.

$(document).ready(function() { 
$('iframe').load(function() { 
    // write your code here.... 
} 

rzucić okiem na przykład plik uploader tutaj: Using iframes for multiple file uploads...

+0

Naprawdę nie chciałem wejść do jquery (jeszcze nie otworzyłem tych drzwi), miałem nadzieję, że poradzę sobie z tym w kilku eleganckich wersjach javascript. Ale dzięki, Rajesh! –

+0

nie jest problemem .. dziękuję za publikację, ponieważ nauczyłem się kilku sztuczek bez używania jquery :) –

0

próbować ten jeden ...

$('iframe').each(function() { 
    $(this).ready(function() { 
     $('#result').html("ready"); 
    }); 
}); 
+6

Oryginalny plakat nigdy nie wspomniał o jQuery i nie ma znacznika jQuery w poście. Sugerowałbym, żeby nie szukali odpowiedzi jQuery. –

+1

Korzystanie z gotowych elementów iframe nie będzie działać zgodnie z oczekiwaniami, http://tinyurl.com/glybl34 – dude