2015-09-08 7 views
0

У меня проблема с jquery. То, что я пытаюсь сделать, - сделать одну и ту же кнопку двумя различными действиями в зависимости от класса. Кажется простым, но я застрял. Что у меня есть это:Подождите, пока addClass выполнит

$(".edit-comment").click(function(){ 
    $(".edit-comment").removeClass("active-edit"); 
    $(".comment-input").removeClass("active-edit"); 
    $(this).prev().children().addClass("active-edit"); 
    $(this).addClass("active-edit"); 
    $(this).prev().children().focus(); 
}); 

$(document).on("click", ".active-edit", function() { 
    console.log("edit"); 
}); 

Проблема с этим я получаю журнал консоли сразу на первый щелчок, и я не нужен, что, когда «редактирование-комментарий» щелкают он должен только addClass и removeClass, а затем во втором клике он должен «редактировать».

Я пробовал с javascript setTimeOut, обратные вызовы, но он не работал.

EDIT:

Разделяя некоторые HTML:

<tr class="alert-comment"> 
<td colspan="6"><input type="text" value="" class="comment-input" /></td> 
<td class="edit-comment" title="Click the text to edit"><span class="edit-comment-icon"></span></td> 
</tr> 
+1

У вас есть '.active-edit' в вашем html в первом запуске, для этого выполняется щелчок. Предоставьте свой html, возможно, есть другое решение, которое лучше, чем это. –

+1

Вы можете попробовать «вернуть false» в свою первую функцию щелчка, чтобы предотвратить распространение события. Событие, вероятно, пузырится до документа и запускает другую функцию щелчка. –

+0

@ MarcosPérezGude html shared –

ответ

0

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

$(".edit-comment").click(function(){ 
    $(".edit-comment").removeClass("active-edit"); 
    $(".comment-input").removeClass("active-edit"); 
    $(this).prev().children().addClass("active-edit"); 
    $(this).addClass("active-edit"); 
    $(this).prev().children().focus(); 

    $('.parent-container').on("click", ".active-edit", function() { 
     console.log("edit"); 
    }); 
}); 

Это, безусловно, не очень красивое решение. Если вы делитесь некоторыми html, кто-то может указать вам в лучшем направлении.

+1

'$ (document) .on (" click ",". «active-edit» - это делегированное событие. Фактически это связано с «документом» и просто проверяет, является ли 'event.target'' .active-edit' или нет. Это решение будет повторно связывать это событие и over, таким образом, запуская 'console.log (« edit »);' несколько раз для каждого щелчка. –

+0

Вы правы, в качестве селектора должен использоваться некоторый родительский контейнер. Вместо этого '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' Однако, как указано, некоторые html были бы полезны для получения более качественного ответа. –

+0

@RocketHazmat прав, спасибо в любом случае F –

Смежные вопросы