Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема при передаче фокуса между фреймами
 
 автор: msgipss   (03.08.2010 в 14:44)   письмо автору
 
 

Здравствуйте знатоки javascript,
помогите с решением следующей проблемы:
имеется фреймовая структура

<html>
    <HEAD>
        <META http-equiv=Content-Type content="text/html; charset=windows-1251">
    </HEAD>

    <FRAMESET id="outterframe" ROWS="19,*" FRAMEBORDER="YES" BORDER="5" BORDERCOLOR="#5F5F7F" MARGINWIDTH="0" MARGINHEIGHT="0" SCROLLING="NO">
        <FRAME name="systemapp" id="systemapp" SCROLLING="NO" FRAMEBORDER="NO" SRC="SystemApp.htm" MARGINWIDTH="0" MARGINHEIGHT="0" SCROLLING="NO" NORESIZE>
        <FRAMESET class="sHistory" id="frames2" name="frames2" COLS="25%,*" BORDER="5" MARGINWIDTH="0" MARGINHEIGHT="0">
            <FRAME name="systemtree" id="systemtree" FRAMEBORDER="NO" SRC="SystemTree.htm" SCROLLING="NO" MARGINWIDTH="0" MARGINHEIGHT="0">
            <FRAME name="mainWindow" id="mainWindow" FRAMEBORDER="NO" SRC="clock.htm" SCROLLING="AUTO" MARGINWIDTH="0" MARGINHEIGHT="0">
        </FRAMESET>
    </FRAMESET>
</html>

и соответственно сами документы во фреймах:
документ SystemTree.htm

<HTML>
    <HEAD>
        <META http-equiv=Content-Type content="text/html; charset=windows-1251">
    <script language=javascript type="text/javascript">
        function setfocus()    {
            top.document.getElementById("outterframe").document.getElementById("frames2").document.getElementById("mainWindow").document.focus();    // передаем фокус основному окну        
        }
    </script>
    </HEAD>

    <BODY bgcolor="#C0C0C0" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">
        <a href="javascript:setfocus();">передать фокус</a>
    </BODY>
</html>

документ SystemApp.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=windows-1251">
    <script language=javascript type="text/javascript">
        function setfocus()    {
            top.document.getElementById("outterframe").document.getElementById("frames2").document.getElementById("mainWindow").document.focus();    // передаем фокус основному окну
        }
    </script>

</head>

<body>
    <a href="javascript:setfocus();">передать фокус</a>
</body>
</html>

и для тестирования получения фокуса
clock.htm
<HTML><HEAD><SCRIPT>
var flag=false;
function clock()
{ if(flag)
  {
   var d = new Date();
   document.f.e.value =
   d.getHours()   + ':' +
   d.getMinutes() + ':' +
   d.getSeconds();
  }
setTimeout('clock();',100);
}
</SCRIPT></HEAD>

<BODY onLoad='clock()' onFocus='this.flag=true' onBlur='this.flag=false'>
    <FORM NAME="f">
        <INPUT NAME="e">
    </FORM>
</BODY>
</HTML>


Как показано в коде не получается передать фокус центральному окну, подскажите пожалуйста где я неправ

Заранее благодарен за любую информацию по данной теме.

  Ответить  
 
 автор: АЯ   (03.08.2010 в 15:16)   письмо автору
 
   для: msgipss   (03.08.2010 в 14:44)
 

У Вас бред какой-то написан.

В общем, функция передачи фокуса должна быть такой:
function setfocus () {top.frames ['mainWindow'].document.f.e.focus ()}
"Простенько и со вкусом!"(с)

Далее - тег <BODY> получить фокус НЕ МОЖЕТ.
Фокус может получить ОКНО (window) или тег <INPUT>.
Соответственно, Ваша "проверка" работать не будет, ибо написанные Вами onfocus и onblur для тега <BODY> - "пустой звук". В общем, сделайте так:
<BODY onLoad='clock()' >
    <FORM NAME="f">
        <INPUT NAME="e" onFocus='flag=true' onBlur='flag=false'>
    </FORM>
Хотя я не знаю - чего Вы там "напроверяете" - value у <INPUT> надо хотя бы сбрасывать при потере фокуса. Добавьте строчку:
else document.f.e.value = '';
setTimeout('clock();',100);

Из какого "источника" Вы, кстати, узнали, что у тега <FRAMESET> есть атрибуты MARGINWIDTH, MARGINHEIGHT и SCROLLING ?
Выбросьте этот "источник" - нет таких атрибутов у этого тега.

  Ответить  
 
 автор: msgipss   (03.08.2010 в 15:44)   письмо автору
 
   для: АЯ   (03.08.2010 в 15:16)
 

извините не разобрался как ответить? оказывается новую ветку создал :)

дело в том что в левом фрейме у меня дерево навигации, и при загрузке документа в центральный фрейм я хочу передать фокус ввода в этот фрейм - вот такая задача, т.е. не конкретному элементу документа, а окну в котором заведомо не известно какие элементы могут находится. Для этого и сделан тест на получения окном фокуса, т.е. если мышью тыкаем то передаем фокус - счетчик крутиться - так вот это сделать программно :)

  Ответить  
 
 автор: АЯ   (03.08.2010 в 16:10)   письмо автору
 
   для: msgipss   (03.08.2010 в 15:44)
 

Уменьшаем функцию передачи фокуса до неприлично малой:
function setfocus () {top.frames ['mainWindow'].focus ()}

Файл clock.htm переписываем ТАК:
<SCRIPT>
var flag=false;
function clock()
{ if(flag)
  {
   var d = new Date();
   document.f.e.value =
   d.getHours()   + ':' +
   d.getMinutes() + ':' +
   d.getSeconds();
  }
else document.f.e.value = '';
setTimeout('clock();',100);
}
window.onfocus = function () {flag = true}
window.onblur  = function () {flag = false}
window.onload = clock;

</SCRIPT></HEAD>
<BODY>
    <FORM NAME="f">
        <INPUT NAME="e" disabled>
    </FORM>
</BODY>

  Ответить  
 
 автор: msgipss   (04.08.2010 в 05:39)   письмо автору
 
   для: АЯ   (03.08.2010 в 16:10)
 

мдяяяя, действительно работает...
а я как бы все варианты перепробовал уже :(
Большое спасибо за разъяснения и за неприлично маленькую функцию :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования