Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   очередь выполнения функций (https://javascript.ru/forum/jquery/52789-ochered-vypolneniya-funkcijj.html)

Dtri 07.01.2015 03:50

очередь выполнения функций
 
Здравствуйте.

код:
$('#id1').on('mouseenter', function(){
     $('.class1').addClass('class2');
});

$('.class2').on('mouseenter', function(){
alert('class2');
});


не срабатывает. и понятно почему.
потому что class2' на момент запуска "mouseenter" ещё не существует.

Отсюда следует.
как поставить очерёдность.
Чтобы вторая функция не выполнялась, пока не закончится первая.

рони 07.01.2015 08:04

Dtri,
поставить вторую функцию на элемент в котором находится class1

ruslan_mart 07.01.2015 17:15

Или делегирование.

$(document).on('mouseenter', '.class2', function() {
   alert('class2');
});

Dtri 07.01.2015 20:06

спасибо.

Dtri 10.01.2015 18:40

Цитата:

Сообщение от Ruslan_xDD (Сообщение 350126)
Или делегирование.

$(document).on('mouseenter', '.class2', function() {
   alert('class2');
});

я что-то не понял. а Чем отличается ваш пример от моего?

Dtri 10.01.2015 18:41

Цитата:

Сообщение от рони (Сообщение 350015)
Dtri,
поставить вторую функцию на элемент в котором находится class1

не могли бы вы показать на примере
?

Dtri 10.01.2015 18:50

$(document).on('click', '.class1', function() {
       $('.class1').addClass('class2');
        
    }, function() {
       alert('class2');
    });



правильно ли я вас понял?

bes 10.01.2015 19:00

Dtri, http://api.jquery.com/on/
давно бы выложил полный тестовый пример и получил ответ

рони 10.01.2015 19:13

Цитата:

Сообщение от Dtri
не могли бы вы показать на примере

вам показали в 3 посте Ruslan_xDD,
только вместо document можно элемент ближе к 'class2'
ваш пример в 7 посте неверный

Dtri 10.01.2015 19:20

Цитата:

Сообщение от bes (Сообщение 350608)
Dtri, http://api.jquery.com/on/
давно бы выложил полный тестовый пример и получил ответ



http://jsfiddle.net/akzwv375/

тут пример. он ещё далеко не доделанный.



нужно было повесить событие на
dropDown
но его не существовало когда запускался скрипт и отсюда возникло желание поставить запуск в очередь.

изначально хотел

$('.dropDown_'+id).on('mouseenter', function(){
                $(this).addclass('active');
            });
 $('.active').on('mousedown', function(){
                    $('#'+id).val( $(this).html()).trigger('change');
                    $('#'+id).trigger('inputChanged');
                });


естественно это не работало.

и тогда:
этой вложенностью вышел из положения.

$('.dropDown_'+id).on('mouseenter', function(){
                $(this).on('mousedown', function(){
                    $('#'+id).val( $(this).html()).trigger('change');
                    $('#'+id).trigger('inputChanged');
                });
            });

но возникло чувство что я делаю что-то не так.

bes 10.01.2015 19:26

Цитата:

Сообщение от Dtri
http://jsfiddle.net/akzwv375/

Цитата:

Сообщение от Dtri
<input type='text' id='id1' class='class1'>

:blink: ты просто добавляешь дополнительный класс к элементу?
можно просто поставить условие, что если второй класс есть, то делать то-то

Dtri 10.01.2015 19:29

Цитата:

Сообщение от рони (Сообщение 350611)
вам показали в 3 посте Ruslan_xDD,
только вместо document можно элемент ближе к 'class2'
ваш пример в 7 посте неверный

значит вот так?

http://jsfiddle.net/2z6ro1k2/2/

вот так работает.
http://jsfiddle.net/2z6ro1k2/3/

но если у меня будет 3, 4, 5 последовательно выполняющихся действий. как быть тогда?

Dtri 10.01.2015 19:39

Цитата:

Сообщение от bes (Сообщение 350616)
:blink: ты просто добавляешь дополнительный класс к элементу?
можно просто поставить условие, что если второй класс есть, то делать то-то

я там подправил коментарии.

Не понял о чём вы. в действующем коде никакого класса к инпуту не добавляется.

создаётся нвоый див в него помещается инпут и потом к инпуту внутри нового дива достраивается список "выпадалки"

bes 10.01.2015 19:39

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<style>
.class1 {
	cursor: pointer;
}
</style>

<div id='id1' class='class1'>DI1</div>
<script>
$("#id1").on('click', function() {
	if ( $(this).hasClass("class2") ) {
		alert("class2");
	} else {
		$(this).addClass("class2");
	}
});
</script>

bes 10.01.2015 19:41

Цитата:

Сообщение от Dtri
Не понял о чём вы. в действующем коде никакого класса к инпуту не добавляется.

создаётся нвоый див в него помещается ипут и потом к инпуту внутри нового дива достраевается список выпадалки

почитай это и сделай нормальный тестовый пример, иначе там у тебя ещё что-нибудь появится

Dtri 10.01.2015 21:36

Цитата:

Сообщение от bes (Сообщение 350608)
Dtri, http://api.jquery.com/on/
давно бы выложил полный тестовый пример и получил ответ

Хотелось бы чтобы было что-то типа case
но для очереди в jquery.

например.

1: function1
2: function2
3: function3

и выполнение будет соответственно 1 затем 2, затем 3

жаль что такой возможности нет.
код писать было бы намного легче

bes 10.01.2015 21:42

Цитата:

Сообщение от Dtri
Хотелось бы чтобы было что-то типа case
но для очереди в jquery.

например.

1: function1
2: function2
3: function3

и выполнение будет соответственно 1 затем 2, затем 3

жаль что такой возможности нет.
код писать было бы намного легче

http://javascript.ru/forum/jquery/52...i-obratno.html
и ещё кучка тем, можно допилить и case, вопрос каков интерфейс для использования

Dtri 10.01.2015 22:53

bes,
боюсь ты не совсем понял вопроса.
возможно это моя вина. не достаточно точно поставил вопрос. Потому я и код не хотел показывать. Код то я сделал. Но хочется оптимизировать и ищу средства.

я пытаюсь узнать. возможно ли как-нибудь сообщить js
выполнять функции в определённом порядке.

например:

$(document).doFunction(func1, func2, func3)

и чтобы скрипт знал что эти функции нужно запускать имеено в таком порядке.

а именно: не запускать func2 пока не выполнится func1.

Dtri 10.01.2015 22:55

Есть ли функция в jquery которая выполняет данный алгоритм?

bes 10.01.2015 23:00

Цитата:

Сообщение от Dtri
bes,
боюсь ты не совсем понял вопроса.
возможно это моя вина. не достаточно точно поставил вопрос. Потому я и код не хотел показывать. Код то я сделал. Но хочется оптимизировать и ищу средства.

я пытаюсь узнать. возможно ли как-нибудь сообщить js
выполнять функции в определённом порядке.

например:

$(document).doFunction(func1, func2, func3)

и чтобы скрипт знал что эти функции нужно запускать имеено в таком порядке.

а именно: не запускать func2 пока не выполнится func1.

тут именно и важно то, как всё это будет применяться, иначе
f1();
f2();

и вторая функция не выполнится, пока не выполнится первая
если запись в разных местах кода, можно поставить флаг, проверка появления класса у элемента - как раз из этой оперы

Dtri 10.01.2015 23:19

Цитата:

Сообщение от bes (Сообщение 350708)
f1();
f2();

и вторая функция не выполнится, пока не выполнится первая
если запись в разных местах кода, можно поставить флаг, проверка появления класса у элемента - как раз из этой оперы

изходя из твоих слов должно работать следующее:
<div id='id1'>id1</div>

function f1(){
    
        $("#id1").adclass('class1');
   
    

}

function f2(){
    
        $(".class1").adclass('class2');
    
}

function f3(){
    
        $(".class2").adclass('class3');
        $('.class3').html('class3');
    
}

$('#id1').on('click', function(){

f1();
f2();
f3();
});

Но оно не работает.
http://jsfiddle.net/r7632m57/

потом что функции то запускаются последовательно, но не дожидаются ввыполнения предыдущей.

bes 10.01.2015 23:25

Цитата:

Сообщение от Dtri
Но оно не работает.
http://jsfiddle.net/r7632m57/

может ошибку c adclass для начала исправить
PS: весь пример можно собрать вместе и выложить здесь с кнопкой run

Dtri 10.01.2015 23:29

Цитата:

Сообщение от bes (Сообщение 350711)
может ошибку c adclass для начала исправить
PS: весь пример можно собрать вместе и выложить здесь с кнопкой run

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>on demo</title>
  <style>
  #id1 {
cursor:pointer;
}
  </style>
  <script src="http://code.jquery.com/jquery-latest.min.js"></script>

</head>
<body>
 
<div id='id1'>id1</div>
<script>
function f1(){
        $("#id1").addClass('class1');
}
function f2(){
        $(".class1").addClass('class2'); 
}

function f3(){
        $(".class2").addClass('class3');
        $('.class3').html('class3');
}
$('#id1').on('click', function(){

f1();
f2();
f3();
});
</script>
 
</body>
</html>

bes 10.01.2015 23:31

ну тебе же консоль пишет, что бл-ть не понимаю я, что такое adclass :)
замени на addClass и по-моему всё работает как надо :yes:

Dtri 10.01.2015 23:33

Цитата:

Сообщение от bes (Сообщение 350713)
ну тебе же консоль пишет, что бл-ть не понимаю я, что такое adclass :)
замени на addClass и по-моему всё работает как надо :yes:

поменял. перечитай.
но попрежнему не работает.

Dtri 10.01.2015 23:34

оу. виноват....
Регистр верхний. ложанулся.

bes 10.01.2015 23:35

Цитата:

Сообщение от Dtri
поменял. перечитай.
но попрежнему не работает.

чего не работает-то, добавился класс class1, потом class2, потом class3 и html заменился на class3, а ты чего хотел?

Dtri 10.01.2015 23:36

Спасибо за терпение и вкрадчивое объяснение всем участникам... кому мог поставил +. ещё раз огромное человеческое спасибо!!!

bes 10.01.2015 23:39

Цитата:

Сообщение от Dtri
оу. виноват....
Регистр верхний. ложанулся.

Цитата:

Сообщение от Dtri
Спасибо за терпение и вкрадчивое объяснение всем участникам... кому мог поставил +. ещё раз огромное человеческое спасибо!!!

собственно об этом и шла речь здесь :)
http://javascript.ru/forum/site/4917...u-zapuska.html

Dtri 10.01.2015 23:49

учту на будущее.


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