Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   jQuery: событие по второму подрят клику (https://javascript.ru/forum/misc/14583-jquery-sobytie-po-vtoromu-podryat-kliku.html)

timyrio 22.01.2011 02:59

jQuery: событие по второму подрят клику
 
Пользуюсб быблиотекой жаба скриптов jQuery.

Помогите, пожалуйста, решить задачу: эфект .slideUp() должен исполнятся после второго подрят нажатия на объект, причем событие даблклик не подходит, допустим юзер кликает по объекту №1, а потом по объекту №2, потом опять по №1 и снова по объекту №1 и только после второго подрят клика на объект №1 событие .slideUp() исполняется. Как это сделать в jQuery.

Gvozd 22.01.2011 03:07

Цитата:

Сообщение от timyrio
жаба скриптов jQuery.

ошиблись форумом

Gvozd 22.01.2011 03:08

Цитата:

Сообщение от timyrio
Пользуюсб быблиотекой

для начала вам сюда:
http://www.gramota.ru/

x-yuri 22.01.2011 04:44

а потом надо объяснить, зачем обрабатывать именно второй клик

Matre 22.01.2011 07:54

var last = null;
document.onclick = function (event) {
	event = event || window.event;
	var target = event.target || event.srcElement;
	if (target == last) {
		ваша функцыя
	}
	last = target;
};

timyrio 22.01.2011 11:46

сенкс Matre, но немного не то, наверное я плохо объяснил.

в коде который Вы дали:
- событие происходит после третего клика;
- после первого клика на объект - щет кликов обнуляется если кликнуть вне объекта, но после двох подрят кликов - не обнуляется;

А нужно, чтобы событие возникало при клику на объект два разы подрят, даблклик не подходит, и при клику вне объекта, допустим на другой объект, подщет кликов обнулялся.

Например: кликаем на объект №1, потом на №2, потом на объект №1 и опять на №1 - и по второму клику (не даблклик) на объект №1 событие исполняется, тоесть когда кликнули первый раз на №1, потом на №2, то щет кликов по первому объекту обнуляются.

Помогите в этом.

Kolyaj 22.01.2011 12:07

Цитата:

Сообщение от Gvozd
для начала вам сюда:
http://www.gramota.ru/

Вот же http://therules.ru/
Заодно хороший пример того, как надо делать сайты.

monolithed 22.01.2011 12:19

Matre, на всякий))
jQuery почти кроссбраузерная библиотека, поэтому ваш код можно сократить до 3-х строчек.

<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>

<script type="text/javascript">
$(function(){
    var $i = 0;
    $('a').click(function(){
        $('body').toggleClass($i++ % 2 && 'body');
        return false;
    });
});
</script>

<style type="text/css">
.body {background:red;}
</style>

<a href="#">click</a>

x-yuri 22.01.2011 13:08

Цитата:

Сообщение от monolithed
почти кроссбраузерная библиотека

:lol:

Цитата:

Сообщение от monolithed
код можно сократить до 3-х строчек

ну вот, в тему ворвались обфускаторы... сейчас еще решатель шаровакуумных задач подтянется :)

timyrio 22.01.2011 13:34

Помогите в следующем:

Есть код:

<script type="text/javascript" src="jquery/jquery-1.4.2.min.js"></script>

<script type="text/javascript">
   $(document).ready(function(){

      $("a#object1").click(function(){
         $(this).slideUp("slow");
         return false;
      });

      $("a#object2").click(function(){
         $(this).slideUp("slow");
         return false;
      });

   });
</script>
  
<a href="#" id="object1">Объект №1</a>
<br>
<a href="#" id="object2">Объект №2</a>

НО, нужно чтоб эфект .slideUp() исполнялся после двох подряд кликов по объекту, причем если кликнуть один раз по "Объекту №1", а потом по "Объекту №2", то щет кликов по "Объекту №1" обнулялся.

Aetae 22.01.2011 14:14

ondblclick?

monolithed 22.01.2011 15:15

x-yuri, я сознательно добавил слово "почти", потому как в последнее время мне очень часто приходится с ней работать и натыкаться на баги. С ходу могу сказать, что новый метод fadeToggle() даже в IE8 работает с глюками (если используется PNG-24 в некоторых случаях заливает альфаканал черным цветом), toggleSlide() - работает рывками. Если интересно, то у них есть bugtracker http://bugs.jquery.com/report (можно в timeline заглянуть)

PS: разубедите меня, что это вижу только я один o_O

Цитата:

Сообщение от x-yuri
ну вот, в тему ворвались обфускаторы... сейчас еще решатель шаровакуумных задач подтянется

извиняюсь, мне показалось, что к код Metre был на jQuery...:-?

timyrio, я же вам нагладно показал первом сообщении как действовать (что же, пример грубой силы):
<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
    var $i=$j=0;
    $('#object1, #object2').click(function() {
        if(this.id == 'object1') {
            $i++%2 ? $(this).slideUp("slow") : $j=0;
        }
        else {
            $j++%2 ? $(this).slideUp("slow") : $i=0;
        }
        return false;
    });
});
</script>
  
<a href="#" id="object1">Объект №1</a><br />
<a href="#" id="object2">Объект №2</a>

упрощенная запись ;) :
this.id == 'object1' ? $i++%2 ? $(this).slideUp("slow") : $j=0 : $j++%2 ? $(this).slideUp("slow") : $i=0;

x-yuri 22.01.2011 15:29

Цитата:

Сообщение от Aetae
ondblclick?

нет, еще шаровакуумнее :)

monolithed, я видел баги прямо у них на сайте (в демках), так что не надо меня убеждать. Просто твоя фраза про кроссбраузерность была ни к чему

а вообще про jQuery... они ж по сути поставили перед собой задачу создать свой язык, а не дополнить и улучшить. Ну вот и разгребают последствия :)

x-yuri 22.01.2011 15:35

PS: разубедите меня, что это вижу только я один :)

monolithed 22.01.2011 16:23

Цитата:

Сообщение от x-yuri
я видел баги прямо у них на сайте (в демках)

еще на главной были, когда там toggleSlide() использовался....
Цитата:

Сообщение от x-yuri
а вообще про jQuery... они ж по сути поставили перед собой задачу создать свой язык, а не дополнить и улучшить

пруф? тогда я их возненавижу :D
Цитата:

Сообщение от x-yuri
PS: разубедите меня, что это вижу только я один

поравил, спс.
просто Safari 5.0 гадит (модольное окно, которое появляется для добавлении ссылки - не является модальным, и можно прям через него кликать мышью ;) )

x-yuri 22.01.2011 17:03

Цитата:

Сообщение от monolithed
пруф? тогда я их возненавижу

может я немного преувеличил, но они явно претендуют на что-то большее: jQuery is designed to change the way that you write JavaScript.

и в дополнение некоторые задачи решаются лучше не на уровне библиотеки (по-крайней мере не так, как в jQuery), например, показ элементов. У них там есть кусок, решающий, какой бы display поставить элементу, методом вставки нового такого же элемента в страницу. К тому же оно все равно может неправильный результат выдать

timyrio 22.01.2011 20:03

1. Как обратится ко всем переменным в скрипте + исключить одну из них?

2. Как обратится ко всем переменным в скрипте, например имя которых начинается с "counter"?

Переменные к которым нужно обратится, без перечисления каждой:
counter1
counter2
counter3
counter4
counter5
и т.д.

x-yuri 22.01.2011 20:22

шаровакуумные вопросы продолжаются...

2) использовать массивы

Андрей38 01.05.2011 20:31

Цитата:

Сообщение от monolithed (Сообщение 89144)
Matre, на всякий))
jQuery почти кроссбраузерная библиотека, поэтому ваш код можно сократить до 3-х строчек.

<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>

<script type="text/javascript">
$(function(){
    var $i = 0;
    $('a').click(function(){
        $('body').toggleClass($i++ % 2 && 'body');
        return false;
    });
});
</script>

<style type="text/css">
.body {background:red;}
</style>

<a href="#">click</a>

Спасибо и от меня тоже...
По Квери вопрос - просьба
Подскажите уважаемые гуру , как переделать этот скрипт чтоб при достижении опр. количества кликов ,заморозить счет кликов /типа анбинд/ , так как скрипт начинает считать сначала при достижении заданного числа в count ++ % 2 ?

var count=1
$('img').live('click',function () {
count ++ % 2 ? }
$('.dv ').addClass ('dfg'):
$('.dv ').addClass ('dfg2')

)}

monolithed 01.05.2011 21:58

Цитата:

Сообщение от Андрей38
типа анбинд

вы сами ответили на свой вопрос.

if(i >= 3) {
    $(this).unbind(event);
}

Андрей38 01.05.2011 22:04

Цитата:

Сообщение от monolithed (Сообщение 102907)
вы сами ответили на свой вопрос.

if(i >= 3) {
    $(this).unbind(event);
}

Ух! Спасибо :thanks: !!! Я еще не юзал на практике всякие штучки с ивентами.Только теорию .Еще раз большое СПАСИБО !

Андрей38 01.05.2011 22:14

Цитата:

Сообщение от monolithed (Сообщение 102907)
вы сами ответили на свой вопрос.

if(i >= 3) {
    $(this).unbind(event);
}

... еще вопрос к Вам. Как внедрить сюда var вместо фиксированного значения,как сделал предыдущий товарищ с примером на тоглклассе ? Так будет работать ?
var num=2
if(i >= num) {
    $(this).unbind(event);
}

monolithed 01.05.2011 22:19

<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>

<script type="text/javascript">
$(function(){
    $('a').click(function(i, j) {
        return function(event) {
            $('input').val(++i);
            i >= j && $(this).unbind(event);
            event.preventDefault();
        };
    }(0, 3));
});
</script>

<a href="#">click</a>
<input type="text" value="0" />

Андрей38 02.05.2011 01:11

Цитата:

Сообщение от monolithed (Сообщение 102912)
<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>

<script type="text/javascript">
$(function(){
    $('a').click(function(i, j) {
        return function(event) {
            $('input').val(++i);
            i >= j && $(this).unbind(event);
            event.preventDefault();
        };
    }(0, 3));
});
</script>

<a href="#">click</a>
<input type="text" value="0" />

Спасибо большое за помощь!
Развитие темы :)
..Мне уже удалось модернизировать код подсчета Попова с его видеоучебника ,так как его можна повторить с моим уровнем изучения Квери
Но здесь уже обратная проблема _ Не удаеться сбросить анбинд по окончания счета

//....$("#apDiv3") по нем был бинд клик.

if(i >= 6) {

//взято из документации Квери
$(this).unbind('click', aClick)}


// штопор : не хочет связывать обратно.Но без ифа-работает как полагаеться
$("#apDiv5").click(function () {
$("#apDiv3").bind('click', aClick)

наверно нужно сварить $(this).unbind('click', aClick)}
, а что с ним делать потом этому $("#apDiv5") не знаю :-?


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