Помогите разобраться с Bubbling
Помогите разобраться в следующей проблеме
У меня форма входа для пользователя всплывающая, необходимо чтобы при нажатии в любое место экрана, эта форма исчезала. <body onclick="close_log()"> <span class="login" onclick="open_log ();"> <script> function open_log() { document.getElementById('login_box').style.display ='block' return false; } function close_log () { document.getElementById('login_box').style.display ='none' } </script> Данный код не работает изза всплывающего эфекта Dom, подскажите как сделать чтобы при первом клике форма сразу не закрывалась? |
В вызов добавьте onclick="open_log (event);"
а в функцию - остановку всплытия события:
function open_log(event) {
document.getElementById('login_box').style.display ='block';
if (event) {
event.stopPropagation()
} else {
window.event.cancelBubble = true
}
return false;
}
|
Форма конечно сразу не закрывается, но появилась другая проблема) Когда я пытаюсь поставить курсор в input то форма закрывается
Такой код сейчас function open_log(event) { document.getElementById('login_box').style.display ='block'; if (event) { event.stopPropagation() } else { window.event.cancelBubble = true } return false; } function close() { document.getElementById('login_box').style.display ='none'; } <body onclick="close()"> <span class="login" onclick="open_log (event);"> |
Ну допишите к этому 'login_box' функцию onclick, которая так же останавливает всплытие.
|
Дописал функцию к 'login_box' которая останавливает всплытие, но данная конструкция работает только в мозиле:( А как сделать для всех браузеров? В javascript пока полный ноль просто:(
|
попробуй добавить отмену событий по умолчанию
function open_log( event ) {
document.getElementById('login_box').style.display ='block';
event = event || window.event;
if (event.stopPropagation) event.stopPropagation();
else event.cancelBubble = true;
if (event.preventDefault) event.preventDefault();
else event.returnValue = false;
return false;
}
|
http://jsfiddle.net/fPEUP/2/
<style>
body {
color: gray;
}
#a {
color: red;
}
#login_box {
border: 2px red dashed;
color: black;
}
</style>
<body>
скройся!
<div id="a" class="login">появись!</div>
<div id="login_box">скрывалка появлялка</div>
</body>
<script>
var b = document.getElementById("login_box");
document.body.onclick = function(a) {
b.style.display = ~(a ? a.target : event.srcElement).className.indexOf("login") ? "block" : "none"
}
</script>
|
К сожалению изменений никаких:( Работает только в мозиле
|
подточи скрипт...
|
Вот так, по-моему, работает везде:
event = event || window.event; event.cancelBubble = true |
| Часовой пояс GMT +3, время: 09:05. |