Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проблема с панелью пользователя (https://javascript.ru/forum/events/31461-problema-s-panelyu-polzovatelya.html)

zevilz 17.09.2012 11:03

Принцип понял, но не понял как сделать. Переделал свой скрипт:
$(document).ready(function() {

      // Сворачиваем панель
  $("#close").click(function(){
    $("div#panel").slideUp("slow");
    $("#toggle a").toggle();
  });

      // Сворачиваем панель при снятии фокуса с #toppanel
  $("#toppanel").blur(function(){
    $("*").not("#panel input").focus(function(){
      $("div#panel").slideUp("slow");
      $("#toggle a").toggle();
    });
  });

      // Сворачиваем панель при снятии фокуса с input
  $("#toppanel input").blur(function(){
    $("*").not("#panel input").focus(function(){
      $("div#panel").slideUp("slow");
      $("#toggle a").toggle();
    });
  });

      // Разворачиваем панель
  $("#open").click(function(){
    $("div#panel").slideDown("slow");
    $("#toggle a").toggle();
  });

});

Сдесь добавил следующее:
1.При снятии фокуса с панели панель сворачивается. Но только если фокус получает не input на этой панели. На панели 4 инпута: для логина, пароля, чекбокс и submit.
2. При снятии фокуса с любого инпута панель сворачивается. Но если фокус получает не другой инпут на этой панели.

При снятии фокуса с панели она закрывается нормально, кнопка закрытия меняет свое содержимое. Но при повторном открытии при первом и втором клике выполняется только $("#toggle a").toggle();. И только при третьем клике панель открывается. То же самое происходит и при снятии фокуса с инпутов. И заметил еще косяк: если после фокуса на инпутах кликнуть на чекбокс, то панель закроется, а если наоборот, то панель не закроется.

Может кто вкурсе, почему происходит такая хрень и как исправить?

devote 17.09.2012 12:47

Цитата:

Сообщение от cyber
Работает в ие 6+ без функции _() (должно ,не пробывал), в ие8+ точно работает

в ИЕ6-7 вдруг внезапно появился Selectors API ???

Цитата:

Сообщение от cyber
return document.querySelectorAll(selector)[0];

интересный способ, а что одиночный селектор отменили?
return document.querySelector(selector);

cyber 17.09.2012 13:30

Цитата:

Сообщение от devote (Сообщение 205114)
в ИЕ6-7 вдруг внезапно появился Selectors API ???


интересный способ, а что одиночный селектор отменили?
return document.querySelector(selector);

что бы не писать каждый раз getElementById(), ClassName я просто (для себя сделал функцию)
и этот коммент там не зря!
Цитата:

//функия для удобства написания примера, копипастить не нужно:)

cyber 17.09.2012 13:34

Цитата:

Сообщение от zevilz (Сообщение 205095)
Принцип понял, но не понял как сделать. Переделал свой скрипт:
$(document).ready(function() {

      // Сворачиваем панель
  $("#close").click(function(){
    $("div#panel").slideUp("slow");
    $("#toggle a").toggle();
  });

      // Сворачиваем панель при снятии фокуса с #toppanel
  $("#toppanel").blur(function(){
    $("*").not("#panel input").focus(function(){
      $("div#panel").slideUp("slow");
      $("#toggle a").toggle();
    });
  });

      // Сворачиваем панель при снятии фокуса с input
  $("#toppanel input").blur(function(){
    $("*").not("#panel input").focus(function(){
      $("div#panel").slideUp("slow");
      $("#toggle a").toggle();
    });
  });

      // Разворачиваем панель
  $("#open").click(function(){
    $("div#panel").slideDown("slow");
    $("#toggle a").toggle();
  });

});

Сдесь добавил следующее:
1.При снятии фокуса с панели панель сворачивается. Но только если фокус получает не input на этой панели. На панели 4 инпута: для логина, пароля, чекбокс и submit.
2. При снятии фокуса с любого инпута панель сворачивается. Но если фокус получает не другой инпут на этой панели.

При снятии фокуса с панели она закрывается нормально, кнопка закрытия меняет свое содержимое. Но при повторном открытии при первом и втором клике выполняется только $("#toggle a").toggle();. И только при третьем клике панель открывается. То же самое происходит и при снятии фокуса с инпутов. И заметил еще косяк: если после фокуса на инпутах кликнуть на чекбокс, то панель закроется, а если наоборот, то панель не закроется.

Может кто вкурсе, почему происходит такая хрень и как исправить?

этот код поломается, если на панель добавить textarea или кнопку button и вы его забудете добавить...
Короче решение хреновое плохое

zevilz 17.09.2012 14:07

я ничего там переделывать не буду. Заново не хочется скрипт писать. А мой работает, но с небольшими косяками. Мне всего лишь надо как то их исправить

cyber 17.09.2012 14:20

я сказал, а вы как хотите (мне все равно!)

zevilz 18.09.2012 06:15

Если следующее в консоли
$("a#open:visible");

выдает пустой результат
[]
, то как это прописать в условии вместо звездочек:
if ("a#open:visible" == ***) {}
?
"", "[]", null, false не срабатывают

devote 18.09.2012 06:26

if ( $("a#open:visible").length === 0 ) {}

zevilz 18.09.2012 17:41

Цитата:

Сообщение от devote (Сообщение 205256)
if ( $("a#open:visible").length === 0 ) {}

Спасибо, как раз именно то, что нужно. Только один знак "=" лишний.

cyber 18.09.2012 17:48

Цитата:

Сообщение от zevilz (Сообщение 205326)
Спасибо, как раз именно то, что нужно. Только один знак "=" лишний.

Нет не лишний


Часовой пояс GMT +3, время: 21:05.