Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.02.2014, 18:00
Интересующийся
Отправить личное сообщение для teragalaxy Посмотреть профиль Найти все сообщения от teragalaxy
 
Регистрация: 07.09.2013
Сообщений: 12

Как объединить несколько похожих скриптов в один?
$(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) появляется форма, нажав на неё повторно - форма скрывается. А как сделать чтобы форма не скрывалась, а скрывалась только в том случае если произошёл клик вне поля формы или по какой-либо другой кнопке?

Заранее благодарю за ответ
Ответить с цитированием
  #2 (permalink)  
Старый 09.02.2014, 18:52
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Как вариант:
$(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. Вобще есть тут что рефакторить.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 09.02.2014, 19:01
Интересующийся
Отправить личное сообщение для teragalaxy Посмотреть профиль Найти все сообщения от teragalaxy
 
Регистрация: 07.09.2013
Сообщений: 12

Сообщение от danik.js Посмотреть сообщение
Вообще, лучше использовать классы. И mouseup навешивать динамически на document. Вобще есть тут что рефакторить.
Полностью согласен, и я бы попросил инфы для ознакомления так как горю желанием узнать побольше. Но как вы поняли я пока не в силах осилить даже такие простые действия. Думаю через пару годков я к этому вернусь
Ответить с цитированием
  #4 (permalink)  
Старый 09.02.2014, 20:33
Интересующийся
Отправить личное сообщение для teragalaxy Посмотреть профиль Найти все сообщения от teragalaxy
 
Регистрация: 07.09.2013
Сообщений: 12

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

Последний раз редактировалось teragalaxy, 10.02.2014 в 05:21.
Ответить с цитированием
  #5 (permalink)  
Старый 09.02.2014, 21:48
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Где jQuery? Добавь атрибут run в тег [HTML run]
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 10.02.2014, 05:19
Интересующийся
Отправить личное сообщение для teragalaxy Посмотреть профиль Найти все сообщения от teragalaxy
 
Регистрация: 07.09.2013
Сообщений: 12

OK
Ответить с цитированием
  #7 (permalink)  
Старый 10.02.2014, 06:45
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Блино, в jQuery $.each передает первым аргументом индекс элемента, а не сам элемент. Сам элемент идет вторым: (index, name)
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 11.02.2014, 15:14
Интересующийся
Отправить личное сообщение для teragalaxy Посмотреть профиль Найти все сообщения от teragalaxy
 
Регистрация: 07.09.2013
Сообщений: 12

Кто-нибудь подскажите, возможно ли выполнить задуманное? Если не средствами javascript - то чем?
Ответить с цитированием
  #9 (permalink)  
Старый 11.02.2014, 15:37
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от teragalaxy
Кто-нибудь подскажите, возможно ли выполнить задуманное?
Ты че, наркоман что-ли? Тебе же уже подсказали.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как объединить 4 одинаковых функции Batyabest Общие вопросы Javascript 2 21.12.2013 22:53
Люди, помогите дилетанту! Как объеденить скрипты в один файл? patroklit Элементы интерфейса 3 04.12.2013 13:55
Как объединить два скрипта в один Dahunpao Events/DOM/Window 2 12.09.2013 19:17
как узнать что несколько элементов не в фокусе? PiExeL Общие вопросы Javascript 7 26.04.2013 10:10