Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

jQuery: событие по второму подрят клику

67K
22 января 2011 года
timyrio
4 / / 22.01.2011
Пользуюсб быблиотекой жаба скриптов jQuery.

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

 
Код:
if($('#myid').data('flag').length) ....


Если пустое - значит кликнули первые раз: ставим значение флага и больше ничего не делаем. Если установлено - значит кликнули уже не впервой и можно запускать slideUp()

http://api.jquery.com/data/
8
22 января 2011 года
mfender
3.5K / / 15.06.2005
RussianSpy, а что, и так можно? Без предварительного объявления переменной?
Офигительно. Надо запомнить и воспользоваться. Вообще, JavaScript - удивительная штука! Твори чо хошь, и никаких тебе Access Violation )))))
67K
22 января 2011 года
timyrio
4 / / 22.01.2011
RussianSpy спасибо, но немного не то, нужно чтобы если кликнуть на объект №1 один раз, а потом кликнуть вне объекта или на другой объект, то щет кликов по объекту №1 обнулялся, и только после двох подряд кликов на объект .slideUp() исполнялся
278
22 января 2011 года
Alexander92
1.1K / / 04.08.2008
Ну повесьте на все объекты, кроме данного, операцию обнуления счетчика, что-то вроде:

 
Код:
$(document).ready(function() {
 $(':not(#your_element)').click(function() {
   $('#myid').data('flag').length = 0;
 }
}


P.S. Если у вас на странице много элементов, будьте осторожны, потому как селекторы типа '*', ':not' и т.п. достаточно медленнные.
13
22 января 2011 года
RussianSpy
3.0K / / 04.07.2006
Цитата: mfender
RussianSpy, а что, и так можно? Без предварительного объявления переменной?
Офигительно. Надо запомнить и воспользоваться. Вообще, JavaScript - удивительная штука! Твори чо хошь, и никаких тебе Access Violation )))))



Да тут не объявление переменной и вообще не переменная используется, а встроенная в jQuery возможность сохранять данные для каждого элемента DOM. Что-то наподобие кук только не для браузера, а для узлов DOM, те же пары "имя=значение".

13
22 января 2011 года
RussianSpy
3.0K / / 04.07.2006
Цитата: timyrio
RussianSpy спасибо, но немного не то, нужно чтобы если кликнуть на объект №1 один раз, а потом кликнуть вне объекта или на другой объект, то щет кликов по объекту №1 обнулялся, и только после двох подряд кликов на объект .slideUp() исполнялся



Ну так мозгом пошевелите - направление я вам задал

67K
22 января 2011 года
dear me
2 / / 22.01.2011
Извините, что пишу здесь, а не в новом топике, но дождаться модерации невозможно!..
Ребята подскажите что не правильно, есть следующий код ниже, это код постраничного вывода с бд, проблема состоит в том, что при выводе, перед первой картинкой располагается пустое поле (картинка) см. ниже



код:

<?
$nums = 5;

if (isset($_GET['page'])) {
$page = intval($_GET['page']);
}
else {
$page = 1;
}

$query = "SELECT COUNT(*) AS `counter`
FROM `images`";
$sql = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_assoc($sql);

$elements = $row['counter'];

$pages = ceil($elements/$nums);

if ($page < 1) {
$page = 1;
}
elseif ($page > $pages) {
$page = $pages;
}

$start = ($page-1)*$nums;

if ($start < 0) $start = 0;

$query = "SELECT *
FROM `images`
LIMIT {$start}, {$nums}";
$sql = mysql_query($query) or die(mysql_error());

do {
printf ("
<align='left'>

<p><a href='images-view.php?view=%s'><img width='250' src='%s'></a></p>

</align>", $row["id"], $row["img"]);
}
while ($row = mysql_fetch_array ($sql));

$neighbours = 3;
$left_neighbour = $page - $neighbours;
if ($left_neighbour < 1) $left_neighbour = 1;

$right_neighbour = $page + $neighbours;
if ($right_neighbour > $pages) $right_neighbour = $pages;

if ($page > 1) {
print ' <a href="?page=1" style="text-decoration: none">1</a> ... <a href="?page=' . ($page-1) . '" style="text-decoration: none">&#171;</a> ';
}

for ($i=$left_neighbour; $i<=$right_neighbour; $i++) {
if ($i != $page) {
print ' <a href="?page=' . $i . '" style="text-decoration: none">' . $i . '</a> ';
}
else {

print ' <a class="current" style="text-decoration: none"><b>' . $i . '</b></a> ';
}
}

if ($page < $pages) {
print ' <a href="?page=' . ($page+1) . '" style="text-decoration: none">&#187;</a> ... <a href="?page=' . $pages . '" style="text-decoration: none">'. $pages .'</a> ';
}
?>

Помогите кто может.
Спасибо
67K
22 января 2011 года
timyrio
4 / / 22.01.2011
Помогите в следующем:

Есть код:


01 <script type="text/javascript" src="jquery/jquery-1.4.2.min.js"></script>
02
03 <script type="text/javascript">
04 $(document).ready(function(){
05
06 $("a#object1").click(function(){
07 $(this).slideUp("slow");
08 return false;
09 });
10
11 $("a#object2").click(function(){
12 $(this).slideUp("slow");
13 return false;
14 });
15
16 });
17 </script>
18
19 <a href="#" id="object1">Объект №1</a>
20 <br>
21 <a href="#" id="object2">Объект №2</a>


НО, нужно чтоб эфект .slideUp() исполнялся после двох подряд кликов по объекту, причем если кликнуть один раз по "Объекту №1", а потом по "Объекту №2", то щет кликов по "Объекту №1" обнулялся.
274
22 января 2011 года
Lone Wolf
1.3K / / 26.11.2006
jQuery не знаю, сам работаю с Prototype-ом, и делалбы я так.
Обьявил бы класс, в констурктор которого передаю список нужных елементов
Далее вешаю листенер на клик на каждый елемент. Листенер это тоже метод класса.
А листенере, в поле класса записываю елемент по которому был клик, предварительно проверив не второй ли это клик

Писал навскидку, сразу в форум. могут быть ошибки... Но думаю идея понятна
[highlight=javascript]
var twoClicks = Class.create({

lastClick:null,
initialize: function(elemnts) {

this.listener = this.clickEvent.bind(this);
elements.invoke('observe','click',this.listener);
}
clickListener: function(event) {
if(event.target==this.lastClick)
{
Effect.SlideUp(event.target);
this.lastClick=null;
}
else
this.lastClick = event.target;
}
})
[/highlight]
Ну и собственно создание экземпляра класса
[highlight=javascript]
new twoClicks(['el1','el2','el3']);
[/highlight]
67K
22 января 2011 года
timyrio
4 / / 22.01.2011
1. Как обратится ко всем переменным в скрипте + исключить одну из них?

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

Переменные к которым нужно обратится, без перечисления каждой:
counter1
counter2
counter3
counter4
counter5
и т.д.
274
22 января 2011 года
Lone Wolf
1.3K / / 26.11.2006
Цитата: timyrio
1. Как обратится ко всем переменным в скрипте + исключить одну из них?

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

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


Массив?

244
23 января 2011 года
UAS
2.0K / / 19.07.2006
Хочу немного пооффтопить, сказав, что данная тема является образцом, который необходимо приводить, чтобы доказать, что нельзя юзать фреймворки, пока не будет достаточного опыта работы с языком. От незнания языка такие вопросы и возникают.

Автору я бы с удовольствием помог, но под рукой сейчас нет веб-средств программирования и т.д. Используйте массив + совет RussianSpy
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог