Что не так с этим кодом jQuery для доступа к элементам внутри iframe? - PullRequest
1 голос
/ 30 сентября 2010

Я пытаюсь использовать jQuery для заполнения формы в iFrame. Вы видите что-то не так с этим кодом? Следует выбрать входные данные и заполнить их значениями TESTuser и TESTpassword.

Вот HTML-код из рамки:

<td align="right"><label for="rcmloginuser">CSID</label></td>
<td><input name="_user" id="rcmloginuser" type="text"></td>
</tr>
<tr>
<td align="right"><label for="rcmloginpwd">Password</label></td>
<td><input name="_pass" id="rcmloginpwd" type="password"></td

А вот и часть jQuery / parent.

<script type='text/javascript'> 
$().ready(function () {
    $('#emailframe').ready(function () {

        $('#emailframe').contents().find('#rcmloginuser').val('TESTuser');
        $('#emailframe').contents().find('#rcmloginpwd').val('TESTpassword');

    });
};


</script>

<iframe id="emailframe" src ="<?php global $base_url; echo $base_url; ?>/mail.php" width="100%" height="700"></iframe>

Ответы [ 4 ]

3 голосов
/ 30 сентября 2010

Есть несколько ошибок скрипта, во-первых, <iframe> не имеет события ready (вызов $("anything").ready() - это действительно вызов .ready() для текущий документ).

Вместо этого вы хотите событие <iframe> .load(), например:

$(function () {
  $('#emailframe').load(function () {
    $('#emailframe').contents().find('#rcmloginuser').val('TESTuser');
    $('#emailframe').contents().find('#rcmloginpwd').val('TESTpassword');
  });
});

Также обратите внимание, что конец - });, вы пропустили круглую скобку там.

0 голосов
/ 30 сентября 2010

Попробуйте

$().ready(function () {
    $('#emailframe').ready(function () {
        alert('iframe length: ' + $('#emailframe').length);    
        alert('contents length: ' + $('#rcmloginpwd').contents().length);
        alert('rcmloginuser length: ' + $('#emailframe').contents().find('#rcmloginuser').length); 
        alert('rcmloginuser length: ' + $('#emailframe').contents().find('#rcmloginpwd').length);    
    });
};

Предупреждают ли все эти оповещения ненулевое значение? Я ожидаю, что первая удастся, но с другими я не так уверен.

Отладчик бедного человека inb4: это правда! Firebug был бы лучше, но это проще описать.

0 голосов
/ 30 сентября 2010

Я бы разбил это и поместил бы точки прерывания отладки (в Chrome или Firebug), чтобы увидеть, где он терпит неудачу:

var iFrameContent = $('#emailframe').contents();
var loginUser = iFrameContent.find('#rcmloginuser');
loginUser.val('username');

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

0 голосов
/ 30 сентября 2010

Они в одном домене и по одной схеме (http против https)?Может быть проблема межсайтового скриптинга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...