2015-02-15 3 views
-1

ПочемуJQuery.on() сваи до

JQuery.on('sameEventName.',function(){...}); 

сваи до зависимости, сколько времени работает код? И есть ли способ предотвратить это?

Вот fiddle

+3

Почему вы ожидаете добавления двух обработчиков, чтобы не добавлять двух обработчиков? – SLaks

+0

На самом деле обработчики запускаются в модальной форме (исходящие из удаленного источника через ajax), чтобы закрыть форму после успешной отправки и перезагрузить некоторые данные. Я сохраняю данные один за другим, и каждый раз, когда я вызываю форму modal, выполняется код .on ('..'). И обновляет данные, которые могут быть дважды или более ненужными .. – DonkeyKong

+0

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

ответ

1

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

$(document).off('aCustomEventName'); 
$(document).on('aCustomEventName', function(){...}); 

Полный фрагмент кода:

$('#set').on('click', function() { 
 
    $(document).off('aCustomEventName'); 
 
    $(document).on('aCustomEventName', function (event) { 
 
     alert('event caught'); 
 
    }); 
 
}); 
 

 
$('#trigger').on('click', function() { 
 
    $(document).trigger("aCustomEventName"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    Click on Set Listener button a few times then click on the Trigger Event button.. 
 
</div> 
 

 
<button id="set">Set Listener</button> 
 
<button id="trigger">Trigger Event</button>

А также fixed jsfiddle (такой же, как фрагмент кода).

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