2013-01-23 6 views
2

У меня есть этот скрипт, который должен работать на ipad. Он работал на хроме с живым, однако, перемещая его, он делает его невосприимчивым.jquery on() с addClass/removeClass

Любые идеи, я был бы признателен!

$("#clickAll").on("click", function() { 
    $(".welcome1poi").show(); 
    $(this).addClass("active"); 
}); 
$("#clickAll.active").on("click", function() { 
    $(this).removeClass("active"); 
    $(".welcome1poi").hide(); 
}); 
+4

Если '# clickAll' добавляется в DOM после запуска, что код, вам нужно делегировать события выше по дереву DOM. Прочитайте [docs для '.on()'] (http://api.jquery.com/on/). –

+0

Возможный дубликат [добавить и удалить классы в порядке с jQuery] (http://stackoverflow.com/questions/14481672/add-and-remove-classes-in-order-with-jquery) – epascarello

+0

Нет необходимости в двух Мероприятия. Используйте toggleClass, как дубликат, который я только что добавил, и переключить, чтобы показать и скрыть другой элемент! – epascarello

ответ

-1

Вы добавляете и удаляете «активный» класс, чтобы создать эффект переключения? Если это так, попробуйте .toggle(), например так:

$('#clickAll).toggle(
    function() { $('.welcome1poi').show(); }, 
    function() { $('.welcome1poi').hide(); }); 
+5

[** toggle() event **] (http://api.jquery.com/toggle-event/) устарел в 1.8 и удален в 1.9. Я бы не предложил использовать его даже со старыми версиями jQuery из-за причин, за которые он устарел. – Nope

+0

Спасибо, я не знаю, почему я об этом не думал! –

+0

** ЭТО НЕ ПРАВИЛЬНОЕ РЕШЕНИЕ ПОСЛЕ ОТКРЫТОГО! ** ВЫПУСК: http://bugs.jquery.com/ticket/11786.Не стесняйтесь использовать его, и ваш код перестает беспокоиться при обновлении версий jQuery. Или вы можете выбрать решение @ bipen с помощью toggle и toggleClass и заставить его работать. – epascarello

3

попробовать это

$("#clickAll").on("click", function(){ 
    $(".welcome1poi").toggle(); 
    $(this).toggleClass("active"); 
}); 

обновленный

как предложено

$(document).on('click',"#clickAll", function(){ 
    $(".welcome1poi").toggle(); 
    $(this).toggleClass("active"); 
}); 

, так как он работал с живой() я предполагаю, что ваш элемент с идентификатором clickAll динамически добавляется поэтому попробуйте этот

$(document).on("click","#clickAll", function() { 
    $(".welcome1poi").show(); 
    $(this).addClass("active"); 
}); 
$(document).on("click","#clickAll.active", function() { 
    $(this).removeClass("active"); 
    $(".welcome1poi").hide(); 
}); 

вы можете заменить селектор $(document) с ближайшим элементом для #clickAll элемента, который будет более эффективным

+1

Да, проблема в некоторых элементах с классом welcome1poi будет открыта/закрыта до того, как это будет нажато ... –

+0

Могу ли я узнать, почему это нижний предел ... – bipen

+0

Сделайте первый документ с включенным, дампом обновления. – epascarello

1

Это делегирует событие в body и он будет пойман, когда он пузырится вверх по DOM.

$('body').on("click", "#clickAll", function(){ 
    $(".welcome1poi").show(); 
    $(this).addClass("active"); 
}); 
$('body').on("click", "#clickAll.active", function(){ 
    $(this).removeClass("active"); 
    $(".welcome1poi").hide(); 
}); 
+0

приятно, только по какой-то причине это не работает на iPad ... –

+0

Невозможно гарантировать порядок событий там! – epascarello

+0

Какой порядок событий вы говорите о @epascarello? –