2014-06-26 3 views
0

У меня довольно сложная система с несколькими вызовами AJAX, которые визуализируют разные шаблоны в других шаблонах в PHP.Анимация jQuery переключается только один раз за звонок

Один из этих шаблонов - это форма редактирования для моего объекта. Эта форма отображается на моем веб-сайте до тех пор, пока не будет нажата кнопка, которая затем запустит jQuery toggle(), чтобы отключить часть моего сайта для этой формы редактирования.

Это прекрасно работает, пока пользователь не использует слайдер jQuery UI на моем сайте.

Что произойдет, если пользователь перейдет в ползунок, так это то, что части моего сайта будут перезагружены с помощью AJAX.

Когда кнопка для toggle() будет нажата, анимация будет проходить так же часто, как используется слайдер (так что если ползунок использовался 4 раза, переключатель будет анимировать два раза 4).

Я отлаживал это и не мог найти ошибку, я не могу предоставить jsFiddle, который мог бы перестроить ситуацию, и я не могу получить доступ к сайту. Функция щелчка будет запущена только один раз, поэтому я действительно не могу объяснить, почему это происходит.

Для того, чтобы отметить, что у меня есть 3 кнопки, которые будут вызывать это событие:

#poi_edit_ajax будет показан, когда ползунок был использован в шаблоне, который будет оказан на AJAX.

#poi_edit_first будет показан при первом доступе к сайту, и ничто не было перезагружено на AJAX.

#poi_edit_last будет показано, так что пользователь может вернуться с точки зрения редактирования

Javascript является следующее:

$("#poi_edit_ajax").click(function(){ 
    $(".toggle_edit").toggle('slow'); 
}); 

$("#poi_edit_first").click(function(){ 
    $(".toggle_edit").toggle('slow'); 
}); 

$("#poi_edit_last").click(function(){ 
    $(".toggle_edit").toggle('slow'); 
}); 

Я не думаю, что кто-то может дать мне решение с помощью всего этого информации, но это все, что я могу предоставить сейчас, поэтому мой вопрос теперь просто, если можно сообщить функции toggle() из jQuery только для запуска анимации ONCE PER CLICK.

Я не думаю, что для этого можно использовать jQuery one(), так как событие click можно использовать только один раз на странице.

EDIT

Согласно комментарию, я опробовал, если несколько обработчиков событий будут регистрироваться в рамках AJAX вызовов, что верно.

код, чтобы исправить это просто:

$("#comment_first").unbind("click").click(function(){ 
    $('.toggle_information').toggle('slow'); 
}); 

$("#comment_last").unbind("click").click(function(){ 
    $('.toggle_information').toggle('slow'); 
}); 

$("#comment_ajax").unbind("click").click(function(){ 
    $('.toggle_information').toggle('slow'); 
}); 

мне просто нужно, прежде чем отвязать Lister привязать его снова, иначе они собираются застрявшие и несколько Слушателям будет реагировать на событие щелчка!

+1

Вы, вероятно, связывание Нажмите события несколько раз (при загрузке JavaScript через AJAX вызовов). Убедитесь, что вы привязываете обработчик Click (который запускает 'toggle()') только один раз. Посмотрите на этот ответ: http://stackoverflow.com/a/969011 –

+0

Кажется, что эта проблема, я регистрирую строку в консоли, и количество журналов совпадает с количеством использование с ползунка. Но я не могу это исправить, я обновляю свой вопрос, вы можете мне помочь? – KhorneHoly

+0

Я исправил его, спасибо @ Doku-так! Если вы хотите ответить на вопрос, я с благодарностью приму это! :) – KhorneHoly

ответ

1

Возможно, вы привязываете событие Click несколько раз (путем загрузки javascript через вызовы AJAX). Убедитесь, что вы привязываете обработчик Click (который запускает toggle()) только один раз.

Взгляните на этот ответ: https://stackoverflow.com/a/969011

(слегка модифицированный) цитата из этого ответа, для быстрой справки:

function alertEvent() { alert("test"); }

$(".ajax").bind("click", alertEvent);

//When you want to ensure it won't happen twice...

$(".ajax").отвязать("click", alertEvent);

$(".ajax").bind("click", alertEvent);

Этот метод удаляет только событие, указать

+0

Спасибо за это! :) Поиск в течение нескольких часов, чтобы найти эту ошибку, я исправил ее следующей строкой: '$ (" # comment_first "). Unbind (" click "). Click (function() { $ ('. Toggle_information'). Toggle ('slow'); }); ' – KhorneHoly

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