Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с передачей переменных в js из iframe 
:(
    Опции темы
JohnB
Дата 29.9.2008, 06:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.9.2008

Репутация: нет
Всего: нет



Есть форма. 

Код


<form action='' method='post' name='send' id='send'> 
<input type='hidden' name='action' value='add_gzad'> 
<input type='text' name='id' value=''> 
<input type='hidden' name='id_sum' value='$num8'> 
... 
<input id=sub type=submit value='Добавить задачу' onClick='addSum(); return false;'> 
</form>




и javascript обработчик. 

Код


function addSum() 

form = document.getElementById("send"); 
id = form.id.value; 
id_sum = form.id_sum.value; 

alert(id); 






т.е. просто функция получает переменные и выводит их. и все работает. 

Но вот когда такая же функция с такими же полями выполняется из скрытого iframe в который загружена эта форма. 
то переменные в Opera не передаются...( в IE все нормально. 

вот функция которая выполняется из формы в iframe 

Код


function addSum() 

form = window.frames['имя_фрейма'].document.getElementById('id_формы'); 

id = form.id.value; 
id_sum = form.id_sum.value; 

alert(id); 





переменные выводятся ==0 хотя если поставишь значние value в форму то будет передаваться эти значения. 
Т.е. те, которые вводишь в форму ручками не передаються. 

В чем может быть проблема?

PM MAIL   Вверх
bars80080
Дата 29.9.2008, 09:42 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



я бы посоветовал не пользоваться именами переменных form и id, мой редактор их цветов выделяет, может они зарезервированы. хотя бы form1 и id1

а где во втором случае находится кнопка, вызывающая функцию addSum() ? в основном документе или внутри фрэйма мож какой обработчик?
PM MAIL WWW   Вверх
JohnB
Дата 29.9.2008, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.9.2008

Репутация: нет
Всего: нет



bars80080, Во первых, спасибо что откликнулся.

Во вторых имена пробовал разные... абсолютно... Причему  для IE достаточно такой конструкции допустим
form2 =document.getElementById("id_формы");

и данные видим!!!


а в Opere верхняя конструкция вообще не вызывает ничего. а вот такая 

form2 = window.frames['имя_фрейма'].document.getElementById('id_формы'); 
или такая 
form2 = parent.frames['имя_фрейма'].document.getElementById('id_формы'); 

при alert(form2); выдает типа object HTMLFormElement
т.е. форму видит а данные из ее полей нет :(((


 где во втором случае находится кнопка, вызывающая функцию addSum() ? в основном документе или внутри фрэйма.

Ответ: Внутри фрейма.





Это сообщение отредактировал(а) JohnB - 29.9.2008, 09:53
PM MAIL   Вверх
bars80080
Дата 29.9.2008, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



Цитата(JohnB @  29.9.2008,  09:52 Найти цитируемый пост)
где во втором случае находится кнопка, вызывающая функцию addSum() ? в основном документе или внутри фрэйма.

Ответ: Внутри фрейма.

а как же она работает, если он скрытый?

а ты точно запускаешь эту функцию? ведь для запуска её из фрэйма (если функция лежит в основном документе) надо обращение к ней устраивать так: parent.addSum();
если же функция наоборот находится внутри фрэйма, как и вызывающая его кнопка, то обращение к форме должно быть без всяких фрэймов, сразу к форме

ну и попробуй ещё обратьтся к элементам не так: 
id = form.id.value; 
id_sum = form.id_sum.value;
а через их непосредственные идентификаторы, т.е. назначить каждому полю свой id и вытащи их через getElementById, или если не хочется, то через getElementsByTagName('input')[1] 
PM MAIL WWW   Вверх
JohnB
Дата 29.9.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.9.2008

Репутация: нет
Всего: нет



да запускается эта функция без всяких парентов. потому что все изменения в ней при вызове отпрабатываются.

ладно попробую через id ы элементов формы повтыкать.
PM MAIL   Вверх
JohnB
Дата 30.9.2008, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.9.2008

Репутация: нет
Всего: нет



Не фига не канает. Завяз на этом уже 3 день ищу ответ :(( 
PM MAIL   Вверх
Itsys
Дата 30.9.2008, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 12
Всего: 34



Полный код в студию плз.
PM MAIL WWW Skype   Вверх
JohnB
Дата 30.9.2008, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.9.2008

Репутация: нет
Всего: нет



Вот функция полная которая получает данные из iframe и не может никак получить. 

В IE она работает если вместо  form2 =window.frames["sframe5"+m+""].document.getElementById("compl_send");
поставить form2 =document.getElementById("compl_send"); а в Opera не хочет (


Код



function CompliteSum(m)
{

form2 =window.frames["sframe5"+m+""].document.getElementById("compl_send");


id_zay = form2.id.value;
    id_sum = form2.id_sum.value;
    b = form2.b.value;
sotrud_end = form2.sotrud_end.value;

day_nach = form2.day_nach.value;
month_nach = form2.month_nach.value;
year_nach = form2.year_nach.value;
    time_nach = form2.time_nach.value;
    day_ok = form2.day_ok.value;
    month_ok = form2.month_ok.value;
    year_ok = form2.year_ok.value;
    time_ok = form2.time_ok.value;
    doroga = form2.doroga.value;
    trans_rash = form2.trans_rash.value;
    compl_comm = form2.compl_comm.value;



//alert(+id_zay+'\n'+ id_sum+'\n'+ b+'\n'+sotrud_end+'\n'+day_nach+'\n'+month_nach+'\n'+year_nach+'\n'
//+time_nach+'\n'+day_ok+'\n'+month_ok+'\n'+year_ok+'\n'+time_ok+'\n'+doroga+'\n'+trans_rash+'\n'+compl_comm);

erdiv5=document.getElementById("cerror3");
erdiv5.innerHTML = "<p align=center><img src='images/loading1.gif'></img><br>Пожалуйста, подождите....</p>";


JsHttpRequest.query
  (
    "complite_request.php",
   {
      "id": id_zay,
      "id_sum": id_sum,
          "b": b, 
          "sotrud_end": sotrud_end,
          "day_nach": day_nach,
                  "month_nach": month_nach,
                  "year_nach": year_nach,
                  "time_nach": time_nach,
                  "day_ok": day_ok,
                  "month_ok": month_ok,
                  "year_ok": year_ok,
                          "time_ok": time_ok,
                          "doroga": doroga,
                          "trans_rash": trans_rash,
                                  "compl_comm": compl_comm



    },

        function (result, errors) 
    {
  
      if (result.err=='no')
      {
           erdiv5.innerHTML = "";
        
        td3 = document.createElement("div");
        comtb3 = document.getElementById("tabless2");

td3.innerHTML = "Выполнил: <b>"+sotrud_end+"</b><br>Дата начала исполнения: <b>"+day_nach+"/"+month_nach+"/"+year_nach+", ("+time_nach+")</b><br>Дата конца исполнения: <b>"+day_ok+"/"+month_ok+"/"+year_ok+", ("+time_ok+")</b><br>Время затраченное на дорогу: <b>"+doroga+"</b> минут<br>Транспортные расходы: <b>"+trans_rash+"</b><br>Комментарий исполнителя: <b>"+compl_comm+"</b><br>";

document.getElementById('forma').style.display="none";
document.getElementById('compl2'+b+'').innerHTML = "<b><br>"+sotrud_end+"</b>";
document.getElementById('compl3'+b+'').innerHTML = "<br><font color=green><b>Выполнена</b></font>";
document.getElementById('compl4'+b+'').innerHTML = "<font color=green><b>Выполнена</b></font>";

txt = document.getElementById('zad'+b+'');

txt.innerHTML = " <font style='font-size: 14px' color=green> • </font>&nbsp <s><a class=search href=?ur=application.php#>Задача "+b+" </a></s> &nbsp;&nbsp; <font class=text color=green> <b> Выполнил: </b></font> "+sotrud_end+", <b> Комментарий исполнителя: </b>"+compl_comm+"";


comtb3.appendChild(td3);
        form2.compl_comm.value = "";

       }
          else
      {
     
        erdiv5.innerHTML = result.log;
        document.getElementById('forma').style.display="";
      }
    },
  true
  )

}


PM MAIL   Вверх
Loengreen
Дата 3.10.2008, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.7.2007

Репутация: нет
Всего: нет



Можно так.
Объявляем переменную в родителе.
Код

var result = 0;


Код в iframe:
Код

function summ (a, b) {
   return a+b;
}
parent.result = summ(document.getElementById('id1'), document.getElementById('id2'));


Или даже так:
В родителе:
Код

var result = 0;
function summ (a, b) {
   result = a + b;
}

В iframe:
Код

parent.summ(document.getElementById('id1'), document.getElementById('id2'));



Попробуйте. У меня так везде работает. smile 





PM MAIL   Вверх
JohnB
Дата 8.10.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.9.2008

Репутация: нет
Всего: нет



Loengreen, спасибо вы натолкнули меня на правильную мысль.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0964 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.