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