Обработчик jquery click внутри фрейма не работает

Я не могу заставить следующий код прикрепить обработчик кликов к элементам в «основном» фрейме. Этот код находится в определении набора фреймов.

<!-- #include file ="..\include\AuthenticationCheck.asp" --> 
<!-- #include file ="..\include\serverValidate.asp" --> 

<html>
<head>
<meta NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0">
<meta HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
<title>Raider Writer Student Roll</title>
<script type="text/javascript" src="../include/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="../include/js/jquery-ui-1.8.4.custom.min.js"></script>

<script type="text/javascript">

    $(function(){//document ready

       $("#main").ready(function () { //The function below executes once the iframe has finished loading

                  $("#main .confirmLink").click(function(e) {
                    alert('hi');

                    });
                });


} );
</script>

</head>
<%
    course_id=request("course_Id")
    if ValidateNumber(course_id)=false then 
        err.raise 8,"Validation: <course_id> is Invalid","<course_id> is: " & course_id
    End if


%>
<%session("currentpage")="tracking"%>

<frameset rows="100,*" border="0">
  <frame name="banner" id="banner" scrolling="no" target="contents" src="rollbanner.asp?course_id=<%response.write(course_id)%>">
  <frameset cols="16%,*" border="5">
    <frame name="contents" id="contents" src="roll.asp?course_id=<%response.write(course_id)%>">



        <frame name="main" id="main" src="../action/helpread.asp?dm=trackingdocs">

  </frameset>
  <noframes>
  <body>
  <p>This page uses frames, but your browser doesn't support them.</p>

  </noframes>
</frameset>


</body>
</html>

person Caveatrob    schedule 14.09.2010    source источник


Ответы (3)


Вы пытались использовать #main в качестве контекста?

$(".confirmLink","#main").click(function(e) {('hi');});

или изменить $("#main").ready(fn) на $("#main").load(fn)

person Kenneth J    schedule 14.09.2010
comment
Это ничего не изменит. Контекст — это просто синтаксический сахар. - person Matt Ball; 15.09.2010

Вы не можете заглянуть внутрь DOM <frame> таким образом. Попробуй это:

$('#main').contents().find('.confirmLink').click(function() { ... });

Теперь даже с этим могут возникнуть проблемы при некоторых обстоятельствах. Если страница во фрейме тоже импортирует jQuery, то можно сделать так:

$('#main').get(0).contentWindow.$('.confirmLink').click(function() { ... });

Это будет использовать собственный jQuery фрейма для настройки обработчика.

person Pointy    schedule 14.09.2010

Не проводя кучу исследований, я бы сказал, что это, вероятно, проблема «готового документа». Вы ожидаете родительский документ, но не документ кадра. Родительский документ считается "загруженным" после того, как все элементы этой страницы. Поскольку фреймы технически не являются частью страницы, а являются отдельной страницей, они не учитываются.

Если у вас есть контроль над страницей, загруженной во фрейм, быстрым обходным решением будет инкапсулировать этот вызов jQuery в функцию, а затем вызвать эту функцию на странице фрейма.

person Joe Mills    schedule 14.09.2010
comment
... за исключением того, что он выполняет работу в готовом обработчике на раме. - person Pointy; 15.09.2010