Универсальная функция с выборкой
Здравствуйте. На сайте есть множество эффектов нажатия на опр. элемент, после которого появляется определенный блок. Пока у меня в коде яваскрипта очень много похожего кода, сделанные отдельно для каждого эффекта.
$("#newAdd").click(function(){
$(".formNews").slideUp(500);
$("#newsP span").css("color", "black");
$(this).css("color", "#FF0000");
$("#formNewAdd").slideDown(500);
});
$("#newUpdate").click(function(){
$(".formNews").slideUp(500);
$("#newsP span").css("color", "black");
$(this).css("color", "#FF0000");
$("#newUpdDiv").slideDown(500);
});
$("#newDelete").click(function(){
$(".formNews").slideUp(500);
$("#newsP span").css("color", "black");
$(this).css("color", "#FF0000");
$("#formNewDel").slideDown(500);
});
И решил я универсальную функцию сделать, чтобы потом только его подставлять:
function newSlide(id){
$(".formNews").slideUp(500);
$("#newsP span").css("color", "black");
$(this).css("color", "#FF0000");
id.slideDown(500);
}
При вызове функции пробовал вместо "id" подставлять "$("#formNewAdd")" - код не работает. Помогите пожалуйста, как решить проблему? |
Цитата:
|
рони,
Ниже приведу код. При открытии страницы один раз автоматически всё прыгает и встаёт. Ничего потом не изменяется. Я немножко поэкспериментировал, и код немножко изменил. Но поведение никак не изменилось - как не работало, так и не работает :-?
<style>
#newAdd {
color: #FF0000;
}
#newUpdDiv, #formNewDel {
display: none;
}
.toggleP span {
text-decoration: underline;
padding: 0 5px;
}
.toggleP span:hover {
cursor: pointer;
text-decoration: none;
color: #FF0000 !important;
}
</style>
<script src='https://code.jquery.com/jquery-3.2.1.min.js' type='text/javascript'></script>
<script type="text/javascript">
$(document).ready(function(){
function newSlide(id){
$(".formNews").slideUp(500);
$("#newsP span").css("color", "black");
$(this).css("color", "#FF0000");
$(id).slideDown(500);
}
$("#newAdd").click(newSlide("#formNewAdd"));
$("#newUpdate").click(newSlide("#newUpdDiv"));
$("#newDelete").click(newSlide("#formNewDel"));
});
</script>
<p id='newsP' class='toggleP'><span id='newAdd'>Добавить объявление</span> ┃ <span id='newUpdate'>Изменить объявление</span> ┃ <span id='newDelete'>Удалить объявление</span></p>
<form method='POST' id='formNewAdd' class='formNews'>
<p>Блок 1</p>
</form>
<div id='newUpdDiv' class='formNews'>
<p>Блок 2</p>
</div>
<form method='POST' id='formNewDel' class='formNews'>
<p>Блок 3</p>
</form>
|
Булат Азат улы,
вам нужна функция, а не результат функции!!!
<meta charset="utf-8">
<style>
#newAdd {
color: #FF0000;
}
#newUpdDiv, #formNewDel {
display: none;
}
.toggleP span {
text-decoration: underline;
padding: 0 5px;
}
.toggleP span:hover {
cursor: pointer;
text-decoration: none;
color: #FF0000 !important;
}
</style>
<script src='https://code.jquery.com/jquery-3.2.1.min.js' type='text/javascript'></script>
<script type="text/javascript">
$(document).ready(function(){
function newSlide(id){
$(".formNews").slideUp(500);
$("#newsP span").css("color", "black");
$(this).css("color", "#FF0000");
$(id).slideDown(500);
}
$("#newAdd").click(function() {
newSlide("#formNewAdd")
});
$("#newUpdate").click(function() {
newSlide("#newUpdDiv")
});
$("#newDelete").click(function() {
newSlide("#formNewDel")
});
});
</script>
<p id='newsP' class='toggleP'><span id='newAdd'>Добавить объявление</span> ┃ <span id='newUpdate'>Изменить объявление</span> ┃ <span id='newDelete'>Удалить объявление</span></p>
<form method='POST' id='formNewAdd' class='formNews'>
<p>Блок 1</p>
</form>
<div id='newUpdDiv' class='formNews'>
<p>Блок 2</p>
</div>
<form method='POST' id='formNewDel' class='formNews'>
<p>Блок 3</p>
</form>
или так
<meta charset="utf-8">
<style>
#newAdd {
color: #FF0000;
}
#newUpdDiv, #formNewDel {
display: none;
}
.toggleP span {
text-decoration: underline;
padding: 0 5px;
}
.toggleP span:hover {
cursor: pointer;
text-decoration: none;
color: #FF0000 !important;
}
</style>
<script src='https://code.jquery.com/jquery-3.2.1.min.js' type='text/javascript'></script>
<script type="text/javascript">
$(document).ready(function(){
function newSlide(id){
return function() {
$(".formNews").slideUp(500);
$("#newsP span").css("color", "black");
$(this).css("color", "#FF0000");
$(id).slideDown(500);
}
}
$("#newAdd").click(newSlide("#formNewAdd"));
$("#newUpdate").click(newSlide("#newUpdDiv"));
$("#newDelete").click(newSlide("#formNewDel"));
});
</script>
<p id='newsP' class='toggleP'><span id='newAdd'>Добавить объявление</span> ┃ <span id='newUpdate'>Изменить объявление</span> ┃ <span id='newDelete'>Удалить объявление</span></p>
<form method='POST' id='formNewAdd' class='formNews'>
<p>Блок 1</p>
</form>
<div id='newUpdDiv' class='formNews'>
<p>Блок 2</p>
</div>
<form method='POST' id='formNewDel' class='formNews'>
<p>Блок 3</p>
</form>
|
рони,
Спасибо, всё работает. Второй вариант понравился больше - код чище и красивее. Думаю, скоростью в работе он не хуже. А почему так-то? Почему если сразу после .click() указать функцию, происходит такое? Что-то же происходит после обновления страницы, хотя и клика не было. А функция запускается после клика? |
Цитата:
вы её сами запустили newSlide("#formNewAdd"), когда формировали клик это
$("#newAdd").click(newSlide("#formNewAdd"));
равно этому
$("#newAdd").click(undefined);
третий вариант сделать код с вашей функцией рабочим
<meta charset="utf-8">
<style>
#newAdd {
color: #FF0000;
}
#newUpdDiv, #formNewDel {
display: none;
}
.toggleP span {
text-decoration: underline;
padding: 0 5px;
}
.toggleP span:hover {
cursor: pointer;
text-decoration: none;
color: #FF0000 !important;
}
</style>
<script src='https://code.jquery.com/jquery-3.2.1.min.js' type='text/javascript'></script>
<script type="text/javascript">
$(document).ready(function(){
function newSlide(id){
$(".formNews").slideUp(500);
$("#newsP span").css("color", "black");
$(this).css("color", "#FF0000");
$(id).slideDown(500);
}
$("#newAdd").click(newSlide.bind($("#newAdd")[0],"#formNewAdd"));
$("#newUpdate").click(newSlide.bind($("#newUpdate")[0],"#newUpdDiv"));
$("#newDelete").click(newSlide.bind($("#newDelete")[0],"#formNewDel"));
});
</script>
<p id='newsP' class='toggleP'><span id='newAdd'>Добавить объявление</span> ┃ <span id='newUpdate'>Изменить объявление</span> ┃ <span id='newDelete'>Удалить объявление</span></p>
<form method='POST' id='formNewAdd' class='formNews'>
<p>Блок 1</p>
</form>
<div id='newUpdDiv' class='formNews'>
<p>Блок 2</p>
</div>
<form method='POST' id='formNewDel' class='formNews'>
<p>Блок 3</p>
</form>
и четвёртый
<meta charset="utf-8">
<style>
#newAdd {
color: #FF0000;
}
#newUpdDiv, #formNewDel {
display: none;
}
.toggleP span {
text-decoration: underline;
padding: 0 5px;
}
.toggleP span:hover {
cursor: pointer;
text-decoration: none;
color: #FF0000 !important;
}
</style>
<script src='https://code.jquery.com/jquery-3.2.1.min.js' type='text/javascript'></script>
<script type="text/javascript">
$(document).ready(function(){
function newSlide(id){
$(".formNews").slideUp(500);
$("#newsP span").css("color", "black");
$(this).css("color", "#FF0000");
$(id).slideDown(500);
}
$("#newAdd").click($.proxy(newSlide, $("#newAdd")[0], "#formNewAdd"));
$("#newUpdate").click($.proxy(newSlide, $("#newUpdate")[0], "#newUpdDiv"));
$("#newDelete").click($.proxy(newSlide, $("#newDelete")[0], "#formNewDel"));
});
</script>
<p id='newsP' class='toggleP'><span id='newAdd'>Добавить объявление</span> ┃ <span id='newUpdate'>Изменить объявление</span> ┃ <span id='newDelete'>Удалить объявление</span></p>
<form method='POST' id='formNewAdd' class='formNews'>
<p>Блок 1</p>
</form>
<div id='newUpdDiv' class='formNews'>
<p>Блок 2</p>
</div>
<form method='POST' id='formNewDel' class='formNews'>
<p>Блок 3</p>
</form>
|
Булат Азат улы,
P.S. тоже самое,форум, искать открывашка более 300 вариантов |
рони,
Спасибо большое! Всё понял! |
| Часовой пояс GMT +3, время: 04:35. |