Как объединить несколько похожих скриптов в один?
$(function() {
var button = $('#loginButton');
var box = $('#loginBox');
var form = $('#loginForm');
button.mouseup(function(login) {
box.toggle();
button.toggleClass('active');
});
form.mouseup(function() { //функция не позволяет форме закрыться если в её поле произошёл клик
return false;
});
$(this).mouseup(function(login) { //функция закроет форму если вне её поля произошёл клик
if(!($(login.target).parent('#loginButton').length > 0)) {
button.removeClass('active');
box.hide();
}
});
});
$(function() {
var button = $('#joinButton');
var box = $('#joinBox');
var form = $('#joinForm');
button.mouseup(function(join) {
box.toggle();
button.toggleClass('active');
});
form.mouseup(function() {
return false;
});
$(this).mouseup(function(join) {
if(!($(join.target).parent('#joinButton').length > 0)) {
button.removeClass('active');
box.hide();
}
});
});
$(function() {
var button = $('#amediaButton');
var box = $('#amediaBox');
var form = $('#amediaForm');
button.mouseup(function(id) {
box.toggle();
button.toggleClass('active');
});
form.mouseup(function() {
return false;
});
$(this).mouseup(function(id) {
if(!($(id.target).parent('#amediaButton').length > 0)) {
button.removeClass('active');
box.hide();
}
});
});
и т.п. И ещё: Нажав на кнопку (например joinButton) появляется форма, нажав на неё повторно - форма скрывается. А как сделать чтобы форма не скрывалась, а скрывалась только в том случае если произошёл клик вне поля формы или по какой-либо другой кнопке? Заранее благодарю за ответ :victory: |
Как вариант:
$(function() {
var forms = ['login', 'join', 'amedia'];
$.each(forms, function(name) {
var button = $('#' + name + 'Button');
var box = $('#' + name + 'Box');
var form = $('#' + name + 'Form');
button.mouseup(function(event) {
box.toggle();
button.toggleClass('active');
});
form.mouseup(function() { //функция не позволяет форме закрыться если в её поле произошёл клик
return false;
});
$(document).mouseup(function(event) { //функция закроет форму если вне её поля произошёл клик
if(!($(event.target).parent('#' + name + 'Button').length > 0)) {
button.removeClass('active');
box.hide();
}
});
});
});
Вообще, лучше использовать классы. И mouseup навешивать динамически на document. Вобще есть тут что рефакторить. |
Цитата:
|
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>modal window</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<style type="text/css">
#main{
width:640px;
height:480px;
border:1px solid #000;
}
#buttons{
width:100px;
height:468px;
border:1px solid #000;
margin:5px;
float:left;
}
#mainnews{
width:516px;
height:468px;
border:1px solid #000;
margin:5px;
float:right;
}
.button{
width:auto;
height:35px;
border:1px solid #000;
}
.button a{
display:block;
height:33px;
}
.window{
width:auto;
height:466px;
border:1px solid #FF0000;
}
</style>
<script type="text/javascript">
$(function() {
var forms = ['login', 'join', 'media'];
$.each(forms, function(name) {
var button = $('#' + name + 'Button');
var box = $('#' + name + 'Box');
var form = $('#' + name + 'Form');
button.mouseup(function(event) {
box.toggle();
button.toggleClass('active');
});
form.mouseup(function() { //функция не позволяет форме закрыться если в её поле произошёл клик
return false;
});
$(document).mouseup(function(event) { //функция закроет форму если вне её поля произошёл клик
if(!($(event.target).parent('#' + name + 'Button').length > 0)) {
button.removeClass('active');
box.hide();
}
});
});
});
</script>
</head>
<body>
<div id="main">
<div id="buttons">
<div class="button" id="loginButton">
<a href="#">Кнопка login</a>
</div>
<div class="button" id="joinButton">
<a href="#">Кнопка join</a>
</div>
<div class="button" id="mediaButton">
<a href="#">Кнопка media</a>
</div>
</div>
<div id="mainnews">
<div class="window" id="loginBox">
<form id="loginForm">some text for login</form>
</div>
<div class="window" id="joinBox">
<form id="joinForm">some text for join</form>
</div>
<div class="window" id="mediaBox">
<form id="mediaForm">some text for media</form>
</div>
</div>
</div>
</body>
</html>
|
Где jQuery? Добавь атрибут run в тег [HTML run]
|
OK
|
Блино, в jQuery $.each передает первым аргументом индекс элемента, а не сам элемент. Сам элемент идет вторым: (index, name)
|
Кто-нибудь подскажите, возможно ли выполнить задуманное? Если не средствами javascript - то чем?
|
Цитата:
|
| Часовой пояс GMT +3, время: 10:12. |