Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

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

 

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

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

тема: как закрыть открытый блок кликнув в любом месте окна браузера?
 
 автор: web777   (24.09.2010 в 22:24)   письмо автору
 
 

Здравствуйте, имеется скрипт на jquery такого плана



<script type="text/javascript">
function toggleActionsBlock(block) {

    //$(".btn-slide").click(function(){

      if($(block).is(":hidden")) {
         $(block).fadeIn("fast");
         this.focus();
         //$(block).focus();
      } else {
         $(block).fadeOut("fast");
      }
        $(this).blur(function() {
            $(block).fadeOut("fast");
        });
      //return false;
    //});
}
</script>

<style type="text/css">
.blockActions {
  position: absolute; 
  display: none; 
  background: #FFFEFB;     
  border: #FFCC33 1px solid; 
  padding: 3px 8px 4px 8px; 
  vertical-align:middle;
  white-space:nowrap;
}
</style>



<a href="#" onclick="toggleActionsBlock('#blockActions');return false;">Действия</a>
<div id="blockActions" class="blockActions">
  <ul>
    <li><a href="#">Добавить</a></li>
    <li><a href="#">Удалить</a></li>
    <li><a href="#">Загрузить</a></li>
  </ul>
</div>



всё работает хорошо, но хотелось чтобы появляющий блок при клике на пустое место исчезал, а не только по ссылке при активации.

Хотя если делать вне функции, this.focus(); выполняется и блок исчезает. Но пришлось сделать ввиде функции поскольку таких блоков(закладок) может быть больше одного, чтобы для каждого блока не повторять один и тотже код меняя только селект

  Ответить  
 
 автор: АЯ   (24.09.2010 в 22:32)   письмо автору
 
   для: web777   (24.09.2010 в 22:24)
 

Надо вместе с показом блока навешивать функцию на событие клика по телу документа, коя закроет блок и отменит сама себя.

  Ответить  
 
 автор: web777   (24.09.2010 в 22:46)   письмо автору
 
   для: АЯ   (24.09.2010 в 22:32)
 

можно пример, просто в скрипте мало разбираюсь, пишу пока по мануалу

  Ответить  
 
 автор: sim5   (24.09.2010 в 22:59)   письмо автору
 
   для: web777   (24.09.2010 в 22:46)
 

$(document.body).click(function() {
  //ваши действия
});

  Ответить  
 
 автор: web777   (24.09.2010 в 23:02)   письмо автору
 
   для: sim5   (24.09.2010 в 22:59)
 

подождите, так ведь у меня весь код находится в отдельной функции toggleActionsBlock() которая вызывается по ссылке

<a href="#" onclick="toggleActionsBlock('#blockActions');return false;">Действия</a>

в качестве аргумента передаётся id блока к примеру #blockActions

  Ответить  
 
 автор: sim5   (24.09.2010 в 23:05)   письмо автору
 
   для: web777   (24.09.2010 в 23:02)
 

И что, по клику тела страницы нельзя узнать стиль вашего блока, и если..., то... ?
И вообще, используя jQuiery, так писать - onclick="toggleActionsBlock('#blockActions');... это расточительность, коли она не оправдана. Да и учтите - кликнуть можно абсолютно по любому элементу на странице, что не хватает фантазии и ради клика используем якорь с return false?

  Ответить  
 
 автор: web777   (24.09.2010 в 23:24)   письмо автору
 
   для: sim5   (24.09.2010 в 23:05)
 

return false; вписывал когда не было в href решотки например href="" иначе была перезагрузка страници при клике на ссылку, сейчас сделал так href="#" и убрал return false;

понимаю может чтото не верно сделал, но пытался сделать проще, чтобы не писать для каждого нового блока отдельный код, а описав одну функцию, и ей передавай только id блока проще было бы, сейчас работает всё нормально, за исключением если кликнуть на ссылку и отвести курсор кликнув на любом месте окна блок не исчезает, исчезает если только повторно кликнуть по ссылке. Почемуто фокус не реагирует.

Смысл в том сделать чтото подобное как допустим на яндексе на главной странице где идёт перечисление разделов и не вошедшие находятся если кликнуть поссылке "ещё" то появиться блок(вкладка) где перечисляются остальные разделы, и если кликнуть на пустом месте то этот блок закроется, именно так и пытаюсь сделать

  Ответить  
 
 автор: sim5   (24.09.2010 в 23:32)   письмо автору
 
   для: web777   (24.09.2010 в 23:24)
 

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

>чтобы не писать для каждого нового блока отдельный код, а описав одну функцию, и ей передавай только id блока проще было бы

Вот как раз при использовании jQuery, этого можно вообще не делать. Почитайте API ее, узнаете как.

  Ответить  
 
 автор: web777   (24.09.2010 в 23:45)   письмо автору
 
   для: sim5   (24.09.2010 в 23:32)
 

я понимаю, но просто сейчас нет времени разбираться, решил обратиться к вам за помощью, постепенно буду изучать, основную часть как я понимаю я сделал

  Ответить  
 
 автор: sim5   (24.09.2010 в 23:49)   письмо автору
 
   для: web777   (24.09.2010 в 23:45)
 

Значит тратить время на написание:
if($(block).is(":hidden")) { 
         $(block).fadeIn("fast"); 
         this.focus(); 
         //$(block).focus(); 
      } else { 
         $(block).fadeOut("fast"); 
      } 
        $(this).blur(function() { 
            $(block).fadeOut("fast"); 
        });
вы нашли, а потратить максимум минут 10-20 для того чтобы узнать как лучше написать, некогда? Открывайте, читайте, там и ребенку за пару часов разобраться можно.

  Ответить  
 
 автор: АЯ   (25.09.2010 в 09:39)   письмо автору
 
   для: web777   (24.09.2010 в 22:46)
 

<html>
<head>
<script>
function myFunc_1 ()
{
var blc = document.getElementById ('block');
blc.style.display = '';
document.body.onmousedown = myFunc_2;
}
function myFunc_2 (evt)
{
var blc = document.getElementById ('block'), e = window.event || evt, o = e.target || e.srcElement;
if (blc == o) return;
document.body.onmousedown = null;
blc.style.display = 'none';
}
</script>
</head>
<body>
<span style="cursor: pointer; text-decoration: underline" onclick="myFunc_1 ()">Show</span>
<div id="block" style="width: 100px; height: 100px; background-color: red; display: none"></div>
</body>
</html>

JQuery - это наркотик.
А никак не лекарство.

  Ответить  
 
 автор: ride   (25.09.2010 в 18:24)   письмо автору
 
   для: АЯ   (25.09.2010 в 09:39)
 

>JQuery - это наркотик.
>А никак не лекарство.
это как понимать надо?

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

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