очередь выполнения функций
Здравствуйте.
код:
$('#id1').on('mouseenter', function(){
$('.class1').addClass('class2');
});
$('.class2').on('mouseenter', function(){
alert('class2');
});
не срабатывает. и понятно почему. потому что class2' на момент запуска "mouseenter" ещё не существует. Отсюда следует. как поставить очерёдность. Чтобы вторая функция не выполнялась, пока не закончится первая. |
Dtri,
поставить вторую функцию на элемент в котором находится class1 |
Или делегирование.
$(document).on('mouseenter', '.class2', function() {
alert('class2');
});
|
спасибо.
|
Цитата:
|
Цитата:
? |
$(document).on('click', '.class1', function() {
$('.class1').addClass('class2');
}, function() {
alert('class2');
});
правильно ли я вас понял? |
Dtri, http://api.jquery.com/on/
давно бы выложил полный тестовый пример и получил ответ |
Цитата:
только вместо document можно элемент ближе к 'class2' ваш пример в 7 посте неверный |
Цитата:
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');
});
});
но возникло чувство что я делаю что-то не так. |
Цитата:
Цитата:
можно просто поставить условие, что если второй класс есть, то делать то-то |
Цитата:
http://jsfiddle.net/2z6ro1k2/2/ вот так работает. http://jsfiddle.net/2z6ro1k2/3/ но если у меня будет 3, 4, 5 последовательно выполняющихся действий. как быть тогда? |
Цитата:
Не понял о чём вы. в действующем коде никакого класса к инпуту не добавляется. создаётся нвоый див в него помещается инпут и потом к инпуту внутри нового дива достраивается список "выпадалки" |
<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>
|
Цитата:
|
Цитата:
но для очереди в jquery. например. 1: function1 2: function2 3: function3 и выполнение будет соответственно 1 затем 2, затем 3 жаль что такой возможности нет. код писать было бы намного легче |
Цитата:
и ещё кучка тем, можно допилить и case, вопрос каков интерфейс для использования |
bes,
боюсь ты не совсем понял вопроса. возможно это моя вина. не достаточно точно поставил вопрос. Потому я и код не хотел показывать. Код то я сделал. Но хочется оптимизировать и ищу средства. я пытаюсь узнать. возможно ли как-нибудь сообщить js выполнять функции в определённом порядке. например: $(document).doFunction(func1, func2, func3) и чтобы скрипт знал что эти функции нужно запускать имеено в таком порядке. а именно: не запускать func2 пока не выполнится func1. |
Есть ли функция в jquery которая выполняет данный алгоритм?
|
Цитата:
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/ потом что функции то запускаются последовательно, но не дожидаются ввыполнения предыдущей. |
Цитата:
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>
|
ну тебе же консоль пишет, что бл-ть не понимаю я, что такое adclass :)
замени на addClass и по-моему всё работает как надо :yes: |
Цитата:
но попрежнему не работает. |
оу. виноват....
Регистр верхний. ложанулся. |
Цитата:
|
Спасибо за терпение и вкрадчивое объяснение всем участникам... кому мог поставил +. ещё раз огромное человеческое спасибо!!!
|
Цитата:
Цитата:
http://javascript.ru/forum/site/4917...u-zapuska.html |
учту на будущее.
|
| Часовой пояс GMT +3, время: 21:06. |