Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как объединить несколько похожих скриптов в один? (https://javascript.ru/forum/dom-window/44981-kak-obedinit-neskolko-pokhozhikh-skriptov-v-odin.html)

teragalaxy 09.02.2014 18:00

Как объединить несколько похожих скриптов в один?
 
$(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:

danik.js 09.02.2014 18:52

Как вариант:
$(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. Вобще есть тут что рефакторить.

teragalaxy 09.02.2014 19:01

Цитата:

Сообщение от danik.js (Сообщение 296793)
Вообще, лучше использовать классы. И mouseup навешивать динамически на document. Вобще есть тут что рефакторить.

Полностью согласен, и я бы попросил инфы для ознакомления так как горю желанием узнать побольше. Но как вы поняли я пока не в силах осилить даже такие простые действия. Думаю через пару годков я к этому вернусь :yes:

teragalaxy 09.02.2014 20:33

<!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>

danik.js 09.02.2014 21:48

Где jQuery? Добавь атрибут run в тег [HTML run]

teragalaxy 10.02.2014 05:19

OK

danik.js 10.02.2014 06:45

Блино, в jQuery $.each передает первым аргументом индекс элемента, а не сам элемент. Сам элемент идет вторым: (index, name)

teragalaxy 11.02.2014 15:14

Кто-нибудь подскажите, возможно ли выполнить задуманное? Если не средствами javascript - то чем?

danik.js 11.02.2014 15:37

Цитата:

Сообщение от teragalaxy
Кто-нибудь подскажите, возможно ли выполнить задуманное?

Ты че, наркоман что-ли? Тебе же уже подсказали.


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