Как организовать цикл, переборку? JQuery

M
На сайте с 09.11.2010
Offline
14
1604

Здравствуйте, увжаемые!

Из цикла на PHP формируются id определенных блоков. И я должен уловит на какой из блоков навел мышь юзер - и сделать его видимым.

Проблема в том, что блоков много, их число будет расти...

Как код ниже, сделать в цикле... ?????

$(function() {

$("#i1")

.mouseover(function() {

$("#t1").show();

})

.mouseout(function() {

$("#t1").hide();

});

});

$(function() {

$("#i2")

.mouseover(function() {

$("#t2").show();

})

.mouseout(function() {

$("#t2").hide();

});

});

...

$(function() {

$("#i1000")

.mouseover(function() {

$("#t1000").show();

})

.mouseout(function() {

$("#t1000").hide();

});

});

Т.е. меняются id блоков, от i1, t1 до i1000,t1000 (500-5000, не важно... но много :D)

Просветите пожалуйста...

Спасибо!

R
На сайте с 06.02.2011
Offline
62
#1



<script language="javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"> </script>



<style>

.mycooldivsmall{ display:block; }
.mycooldivbig{ display:none; }

</style>


<div class="mycooldivsmall">
i am small
</div>
<div class="mycooldivbig">
i am big
</div>


<div class="mycooldivsmall">
i am small
</div>
<div class="mycooldivbig">
i am big
</div>
<div class="mycooldivsmall">
i am small
</div>
<div class="mycooldivbig">
i am big
</div>
<div class="mycooldivsmall">
i am small
</div>
<div class="mycooldivbig">
i am big
</div>
<div class="mycooldivsmall">
i am small
</div>
<div class="mycooldivbig">
i am big
</div>
<div class="mycooldivsmall">
i am small
</div>
<div class="mycooldivbig">
i am big
</div>
<script>

$(".mycooldivsmall").live("mouseover",function(){
$(this).hide();
$(this).next().show();

});

$(".mycooldivbig").live("mouseout",function(){
$(this).hide();
$(this).prev().show();
})


</script>

получить ID блока

$(this).attr("id")

live вешает обработчик даже на вновь созданные блоки, после инициализации DOM

была такая же задача в WP, такое решение придумал

C
На сайте с 04.02.2005
Offline
291
#2

присваивайте таким блокам, какой-нибудь class

M
На сайте с 09.11.2010
Offline
14
#3
RControl:


<script language="javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"> </script>
...

$(".mycooldivsmall").live("mouseover",function(){
$(this).hide();
$(this).next().show();

});

$(".mycooldivbig").live("mouseout",function(){
$(this).hide();
$(this).prev().show();
})


</script>

У меня есть N элементов, блоков. Мне надо чтобы при наведении мыши на определенный блок (id="iN") становился видимым только его подблок (id="tN").

А причем здесь то что вы написали???

Какое мне дело до предыдущих и следующих? Мне же не по очереди надо их, а куда мышь пришла.

---------- Добавлено 08.09.2012 в 16:30 ----------

Chukcha:
присваивайте таким блокам, какой-нибудь class

Та класс присвоить не проблема... Только смысл? Если у класс общий для всех элементов. Мне надо показать при наведении только один определенный блок из 1000, а не все 1000...

У меня, допустим, 500 или 1000 блоков. Да и я что, каждому буду классы присваивать при условии наведения мыши???

Как цикл создать, чтобы перебирало элементы и при наведении на определенный - выводило соответственный блок. ??

B
На сайте с 07.12.2009
Offline
42
#4
mayorua:
У меня есть N элементов, блоков. Мне надо чтобы при наведении мыши на определенный блок (id="iN") становился видимым только его подблок (id="tN").
А причем здесь то что вы написали???
Какое мне дело до предыдущих и следующих? Мне же не по очереди надо их, а куда мышь пришла.

Ну так сделайте один общий класс на эти элементы, а id получайте как писали выше через

var id = $(this).attr('id');

А потом делайте, что-нибудь $('#' + id).show();

Я не понимаю зачем пытаться сделать все через ж.пу

M
На сайте с 09.11.2010
Offline
14
#5

Уточняю. У мнея в PHP на странице в цикле выводятся все фотографии из БД.


printf "<div class='imgbox' id='i%s'>
<div class='imgtags' id='t%s'><div>
</div>"$id,$id);

Блок <div class='imgtags'> - скрыт display:none; в стилях.

$id - номер фотографии в БД.

Соответственно, таких блоков много...

Мне надо когда юзер наводит мышь НА КОНКРЕТНЫЙ блок <div class='imgbox'>

Делать видимым КОНКРЕТНЫЙ блок <div class='imgtags'>, находящийся внутри него.

Соответственно в первом сообщении указан код JQuery, как я это намерен реализовать. Но не писать же мне 500-1000 таких функций... ВОПРОС: Как сделать переборку, цикл... ????😡

---------- Добавлено 08.09.2012 в 16:47 ----------

bndr:
Ну так сделайте один общий класс на эти элементы, а id получайте как писали выше через
var id = $(this).attr('id');

А потом делайте, что-нибудь $('#' + id).show();

Я не понимаю зачем пытаться сделать все через ж.пу

Мне не очень важно через опу или нет. Мне надо чтобы работало...

Это


$(function() {
$(".imgbox")
.mouseover(function() {
var id = $(this).attr('id');
$('#'+id).show();
})
.mouseout(function() {
var id = $(this).attr('id');
$('#'+id).hide();
});
});

НЕ РАБОТАЕТ! 🤪

C
На сайте с 04.02.2005
Offline
291
#6

$('.myclass).each(function(index) {

var id = $(this).attr('id');

$('#' + id).click дальше, надеюсь, продолжите сами

M
На сайте с 09.11.2010
Offline
14
#7

Chukcha:
$('.myclass).each(function(index) {
var id = $(this).attr('id');
$('#' + id).click дальше, надеюсь, продолжите сами

Да! Спасибо!

Поигрался, сработал такой вот код:


$('.imgbox').each(function() {
$(this).mouseover(function() {
var id = $(this).attr('id');
$('#t'+id).show();
})
$(this).mouseout(function() {
var id = $(this).attr('id');
$('#t'+id).hide();
});
});

Уряяя! 😂

Тема закрыта...

C
На сайте с 04.02.2005
Offline
291
#8

Я боюсь что Вы не совсем понимаете что вы делаете.

т.е. вы считаете, что событие типа

$('.myclass').mouseout

на все элементы?

совсем это НЕ ТАК

Событие будет на каждом элементе класса

например

id=i1 class=myclass

id=i2 class=myclass

$('.myclass').mouseover( ...

$(this).show ...

будет работать только на том элементе, куда вы приведете/уведете мышь

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий