jQuery: событие по второму подрят клику
Помогите, пожалуйста, решить задачу: эфект .slideUp() должен исполнятся после второго подрят нажатия на объект, причем событие даблклик не подходит, допустим юзер кликает по объекту №1, а потом по объекту №2, потом опять по №1 и снова по объекту №1 и только после второго подрят клика на объект №1 событие .slideUp() исполняется. Как это сделать в jQuery.
Код:
if($('#myid').data('flag').length) ....
Если пустое - значит кликнули первые раз: ставим значение флага и больше ничего не делаем. Если установлено - значит кликнули уже не впервой и можно запускать slideUp()
http://api.jquery.com/data/
Офигительно. Надо запомнить и воспользоваться. Вообще, JavaScript - удивительная штука! Твори чо хошь, и никаких тебе Access Violation )))))
RussianSpy спасибо, но немного не то, нужно чтобы если кликнуть на объект №1 один раз, а потом кликнуть вне объекта или на другой объект, то щет кликов по объекту №1 обнулялся, и только после двох подряд кликов на объект .slideUp() исполнялся
Код:
$(document).ready(function() {
$(':not(#your_element)').click(function() {
$('#myid').data('flag').length = 0;
}
}
$(':not(#your_element)').click(function() {
$('#myid').data('flag').length = 0;
}
}
P.S. Если у вас на странице много элементов, будьте осторожны, потому как селекторы типа '*', ':not' и т.п. достаточно медленнные.
Цитата: mfender
RussianSpy, а что, и так можно? Без предварительного объявления переменной?
Офигительно. Надо запомнить и воспользоваться. Вообще, JavaScript - удивительная штука! Твори чо хошь, и никаких тебе Access Violation )))))
Офигительно. Надо запомнить и воспользоваться. Вообще, JavaScript - удивительная штука! Твори чо хошь, и никаких тебе Access Violation )))))
Да тут не объявление переменной и вообще не переменная используется, а встроенная в jQuery возможность сохранять данные для каждого элемента DOM. Что-то наподобие кук только не для браузера, а для узлов DOM, те же пары "имя=значение".
Цитата: timyrio
RussianSpy спасибо, но немного не то, нужно чтобы если кликнуть на объект №1 один раз, а потом кликнуть вне объекта или на другой объект, то щет кликов по объекту №1 обнулялся, и только после двох подряд кликов на объект .slideUp() исполнялся
Ну так мозгом пошевелите - направление я вам задал
Ребята подскажите что не правильно, есть следующий код ниже, это код постраничного вывода с бд, проблема состоит в том, что при выводе, перед первой картинкой располагается пустое поле (картинка) см. ниже
код:
<?
$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">«</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">»</a> ... <a href="?page=' . $pages . '" style="text-decoration: none">'. $pages .'</a> ';
}
?>
Помогите кто может.
Спасибо
Есть код:
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" обнулялся.
Обьявил бы класс, в констурктор которого передаю список нужных елементов
Далее вешаю листенер на клик на каждый елемент. Листенер это тоже метод класса.
А листенере, в поле класса записываю елемент по которому был клик, предварительно проверив не второй ли это клик
Писал навскидку, сразу в форум. могут быть ошибки... Но думаю идея понятна
[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]
2. Как обратится ко всем переменным в скрипте, например имя которых начинается с "counter"?
Переменные к которым нужно обратится, без перечисления каждой:
counter1
counter2
counter3
counter4
counter5
и т.д.
Цитата: timyrio
1. Как обратится ко всем переменным в скрипте + исключить одну из них?
2. Как обратится ко всем переменным в скрипте, например имя которых начинается с "counter"?
Переменные к которым нужно обратится, без перечисления каждой:
counter1
counter2
counter3
counter4
counter5
и т.д.
2. Как обратится ко всем переменным в скрипте, например имя которых начинается с "counter"?
Переменные к которым нужно обратится, без перечисления каждой:
counter1
counter2
counter3
counter4
counter5
и т.д.
Массив?
Автору я бы с удовольствием помог, но под рукой сейчас нет веб-средств программирования и т.д. Используйте массив + совет RussianSpy