11.09.2012, 05:09
|
Аспирант
|
|
Регистрация: 24.05.2012
Сообщений: 93
|
|
Видимо проблема в том, что у меня инпуты находятся в одном контейнере (#panel), кнопки открыть/закрыть - в другом (.login_tab), оба они находятся в #toppanel, в котором при событий $('#toppanel').blur должен закрываться контейнер находящийся в нем (#panel), а не сам #toppanel
|
|
12.09.2012, 12:36
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
zevilz, чет я забыл про вас=)
<!DOCTYPE HTML>
<html>
<head>
<style>
#block {
width:200px;
height:200px;
border:4px solid red;
display:none;
}
body {
border:2px solid black;
}
</style>
</head>
<body tabindex='-1'>
<div tabindex='-1' id='block'>
wereasrwer
<input type='text'>
<div>
<input type='text'>
</div>
</div>
<div id='inform'></div><br/>
<a href='#' id='open'>open/close</a>
<br><input type='text'>
<script>
function _(selector) {//функия для удобства написания примера, копипастить не нужно:)
return document.querySelectorAll(selector)[0];
}
function Focus_and_Blur(opt){
var elem = opt.elem, focusForElem;
if (elem.addEventListener){
elem.addEventListener('focus' , onFocus,true);
document.addEventListener('focus',onDocumentFocus,true);
} else {
elem.onfocusin = onFocus;
document.onfocusin = onDocumentFocus;
}
function onFocus(e) {
focusForElem = true;
event.cancelBubble = true;
opt.focus.call(this,e);
}
function onDocumentFocus (e) {
if (focusForElem) {
focusForElem = false;
opt.blur.call(elem,e)
}
}
};
//пример вызова, в саму функцию лучше не лезть
Focus_and_Blur({
elem:_('#block'),
focus:function () {
_("#inform").innerHTML = 'focus on '+ this.id;
},
blur: function () {
_("#inform").innerHTML = 'blur '+ this.id;
_('#block').style.display = 'none';
}
});
_('#open').onclick = function () {
_('#block').style.display = 'block';
_('#block').focus();// ставим фокус на блок
return false;
}
</script>
</body>
</html>
вот
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
12.09.2012, 14:17
|
Аспирант
|
|
Регистрация: 24.05.2012
Сообщений: 93
|
|
Что-то не хочет открываться
<!DOCTYPE HTML>
<html>
<head>
<style>
#toppanel {
position:fixed;
z-index: 999;
margin:0px;}
#toppanel a {cursor:pointer;}
#toppanel:focus {outline: none;}
#panel {
position: relative;
z-index: 3;
display: none;}
#toppanel .login_tab {
position: relative;
top: 0;
z-index: 999;}
</style>
</head>
<body>
<div id="toppanel" tabindex="-1">
<div id="panel">
<div class="content_panel clearfix_panel">
<input type='text' id='fld1' size='10' name='req_username' value=''>
<input type='password' id='fld2' size='10' name='req_password' value=''>
</div>
</div>
<div class="login_tab">
<span id="toggle">
<a id="open" class="open">Открыть панель</a>
<a id="close" style="display: none;" class="close">Закрыть панель</a>
</span>
</div>
</div>
<script>
function _(selector) {//функия для удобства написания примера, копипастить не нужно:)
return document.querySelectorAll(selector)[0];
}
function Focus_and_Blur(opt){
var elem = opt.elem, focusForElem;
if (elem.addEventListener){
elem.addEventListener('focus' , onFocus,true);
document.addEventListener('focus',onDocumentFocus,true);
} else {
elem.onfocusin = onFocus;
document.onfocusin = onDocumentFocus;
}
function onFocus(e) {
focusForElem = true;
event.cancelBubble = true;
opt.focus.call(this,e);
}
function onDocumentFocus (e) {
if (focusForElem) {
focusForElem = false;
opt.blur.call(elem,e)
}
}
};
//пример вызова, в саму функцию лучше не лезть
Focus_and_Blur({
elem:_('#panel'),
focus:function () {
// $("#toggle a").toggle();
},
blur: function () {
// $("#toggle a").toggle();
$("div#panel").slideUp("slow");
// _('#panel').style.display = 'none';
}
});
_('#open').onclick = function () { $("div#panel").slideDown("slow");
$("#toggle a").toggle();
_('#panel').style.display = 'block';
_('#panel').focus();// ставим фокус на блок
return false;}
_('#close').onclick = function () { $("div#panel").slideUp("slow");
$("#toggle a").toggle();
// _('#panel').style.display = 'none';
// _('#panel').blur();// ставим фокус на блок
return false;}
</script>
</body>
</html>
Последний раз редактировалось zevilz, 12.09.2012 в 15:25.
|
|
12.09.2012, 14:30
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
оно и не должно работать, потому что нужно либо копировать полностью с функцией
function _(selector) {//функия для удобства написания примера, копипастить не нужно:)
return document.querySelectorAll(selector)[0];
}
либо ее не использовать
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
12.09.2012, 15:30
|
Аспирант
|
|
Регистрация: 24.05.2012
Сообщений: 93
|
|
В посте выше изменил код - не открывается.
На сайте http://yellow-duck.net/ с тем же самым кодом открывается, закрывается. Но по blur не закрывается. Выделяется только один из инпутов. При выделении второго панель закрывается и при этом не работает toggle
|
|
12.09.2012, 15:38
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
если честно то не знаю у вас там такая камасутра получилась из за пери мешки чистого js и jquery..
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
12.09.2012, 15:45
|
Аспирант
|
|
Регистрация: 24.05.2012
Сообщений: 93
|
|
Может легче будет мой переделать?
$(document).ready(function() {
// Сворачиваем панель
$("#close").click(function(){
$("div#panel").slideUp("slow");
});
// Сворачиваем панель при снятии фокуса
$("#toppanel").blur(function(){
$("div#panel").slideUp("slow");
$("#toggle a").toggle();
});
// Разворачиваем панель
$("#open").click(function(){
$("div#panel").slideDown("slow");
});
// Переключаем кнопки "Войти | Регистрация" на "Закрыть панель" при нажатии кнопки мыши
$("#toggle a").click(function () {
$("#toggle a").toggle();
});
});
а именно в:
// Сворачиваем панель при снятии фокуса
$("#toppanel").blur(function(){...}
реально засунуть условие что-нибудь типа такого
if ("#toppanel input:focus") {$("div#panel").slideUp("slow");
$("#toggle a").toggle();}
else {}
?
|
|
12.09.2012, 15:48
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
не, я ненавижу jquery особенно после моего прошлого проекта.
Могу расписать алгоритм как у меня работает а вы уже сами переделаете
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
12.09.2012, 15:50
|
Аспирант
|
|
Регистрация: 24.05.2012
Сообщений: 93
|
|
А от чего такая ненависть? можно и как у вас
|
|
12.09.2012, 15:58
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
не знаю просто не люблю я jquery.
Алгоритм:
-ставим событие focus(у меня стоит focus для норм браузеров и focusin для тех которые не поддерживают addEventListener) на element и на body
-при получение фокуса элементом , переменная focusForElem ставится в true
-при получение фокуса на body проверяется focusForElem если true то значить фокус ушел с element
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
|
|