2008-10-21 19 views
15

Mam stronę, z pewnym kodem w js i jQuery i działa bardzo dobrze. Ale niestety cała moja strona jest bardzo stara i używa ramek. Kiedy ładuję moją stronę wewnątrz ramki, $(document).ready() nie odpala się.

Moja ramek wygląda następująco:

<frameset rows="79,*" frameBorder="1" frameSpacing="1" bordercolor="#5996BF" noresize> 
    <frame name="header" src="Operations.aspx?main='Info.aspx'" marginwidth="0" marginheight="0" scrolling="no" noresize frameborder="0"> 
    <frame name="main" src="Info.aspx" marginwidth="0" marginheight="0" scrolling="auto" noresize frameborder="0">  
</frameset> 

Moja strona jest ładowana do ramki main. Co powinienem zrobić?

+1

Gdzie jest twój JavaScript? W ramce "głównej" lub w zestawie ramek? – Tomalak

Odpowiedz

-2

Nie ma powodu, aby $(document).ready() nie był wywoływany. Upewnij się, że twoja strona zawiera załącznik do jquery.js. Spróbuj wykonać prosty test z pustą stroną HTML i po prostu powiadom, aby zobaczyć, czy jest inny problem.

Jeśli próbujesz używać tego wewnątrz strony HTML zawierającej definicję ramy za, należy pamiętać, że nie istnieje żaden dokument, trzeba będzie użyć

+4

będziesz musiał użyć ...? – Ken

1

Czy próbowałeś umieścić kod jQuery wewnątrz strona Info.aspx?

+0

Czy wiemy, czy to ASP.NET? –

+0

@ BrianG frame src to 'Operations.aspx? Main = 'Info.aspx' – Gogol

0

Nie wiem, czy to najlepsze rozwiązanie, ale po usunięciu $(document).ready() i zachowaniu jego ciała wszystko działa idealnie.

0

Nie jestem pewien, co próbujesz zrobić, ale mam jeszcze starszą klasyczną aplikację asp, która działa poza ramkami, a niedawno dodałem funkcjonalność jQuery i działa świetnie. Funkcja $ (document) .ready() działa poprawnie w ramce, ale jeśli chcesz odwołać się do DOM w innej ramce, będziesz musiał użyć zdarzenia onload ramki, aby poinformować Cię, kiedy załadowany jest DOM ramki. Wprawdzie użyłem iFrames, ale koncepcja powinna być taka sama.

2

Jeśli chcesz ognia zdarzenie onload do swoich klatek, a następnie wykonaj następujące kroki:

  1. Przypisywanie id i name do każdego znacznika <frame>. Upewnij się, że wartości atrybutów id i name są takie same.

  2. Poniższa kodu do ognia zdarzenie onload ramy:

    $("frameName").ready(function() { 
        // Write your frame onload code here 
    } 
    
7

Próbowałem metody wymienione w innym komentarzu:

$("#frameName").ready(function() { 
    // Write you frame on load javascript code here 
}); 

i to nie działa dla mnie.

to zrobił:

$("#frameName").load(function() { 
    //code goes here 
}); 

Choć zdarzenie nie ognia, jak szybko - to czeka, aż obrazy i css załadowaniu również.

+1

Dla przejrzystości, powinno to być $ (" # frameName "). – HertzaHaeon

+0

Selektor powinien mieć postać: $ ("frame [name = 'main']") not $ ("# frameName"). –

1

następuje pracował mi:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script> 
<script> 
$(window.parent.frames[0].document).ready(function() { 
    // Do stuff 
}); 
</script> 

[0] wskazuje, że pierwsza ramka w dokumencie [1], to jest drugą ramę, i tak dalej. Jest to szczególnie miłe, jeśli nie masz kontroli nad marżą i nadal używasz gotowego dokumentu.

1

Długo pracowałem nad tym postem ... oto moje rozwiązanie.

test.html

<!DOCTYPE HTML> 
<html> 
<head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 

    <script>   
     document.write('<frameset><frame name="frame_content" id="frame_content"></frame></frameset>'); 

     $('#frame_content').attr('src', 'test2.html'); 
     $('#frame_content').load(function() 
     { 
     if('${"#header"}' != '') { 
      $("#header", frame_content.document).remove(); 
     } 
     }); 
     if($('#frame_content').complete) $('#frame_content').trigger("load"); 
    </script> 

</head> 
</html> 

test2.html

<!DOCTYPE HTML> 
<html> 

    <head> 
    </head> 

    <body> 
    <div id="header">You will never see me, cause I have been removed!</div> 
    </body> 
</html> 
2

Wiem, że to stary temat. Ale aby pomóc niektórym z was, którzy osiągnęli tę stronę, oto moje rozwiązanie:

$($("#frameName")[0].contentWindow.document).ready(function() { 
    // Write you frame onready code here 
}); 
0

Nie trzeba modyfikować znaczników. Po prostu napraw selektor. Powinno być:

$("frame[name='main']").ready(function(){..}); 

nie

$("#frameName").ready(function(){..}); 

Uwaga: wydaje się, że gotowy zdarzenie jQuery pożary wielokrotnie. Upewnij się, że wszystko jest w porządku z twoją logiką.

0

Ta odpowiedź może być późno, ale ta odpowiedź może pomóc kogoś takiego jak ja ...

Można to zrobić za pomocą natywnego kodu JavaScript -

ifrm2 = var ifrm2 = document.getElementById('frm2'); 
if (ifrm2.contentDocument.readyState == 'complete') { 
    //here goes the code after frame fully loaded 
} 

//id = frm2 is the id of iframe in my page