2013-07-26 2 views
1

Я использую этот код на своей странице. Когда я нажимаю на кнопку с классом .process_record, она дает мне одно предупреждение, но если я снова нажму на ту же кнопку, она даст мне 2 предупреждения за раз. Я не знаю, почему так оно себя ведет.jQuery .on trigering несколько раз

$(".body .content").on("click", ".process_record", function(e){ 

     alert("clicked"); 
     var url = $(this).attr("data-url"); 
     $.post(url, function(data){ 
      $(".body .content").html(data); 
     },"html"); 
    }) 
+1

Что добавляется в ваш '$ .post'? Вероятно, причиной этого. – tymeJV

+4

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

+0

Кажется, что содержимое, загружаемое через $ .post, также имеет кнопку с тем же классом. Я хочу выполнить одно и то же действие с помощью этой кнопки, поэтому я использую метод .on. – TPSstar

ответ

0

http://jsfiddle.net/MaxPRafferty/z9VFA/

Это работает правильно для меня в вышеприведенной скрипке. HTML настроен как:

<div class="body"> 
    <div class="content"> 
     <input type="button" class="process_record" /> 
    </div> 
</div> 

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

решение

Код, чтобы ваши события отвязать и перепривязывают сами по щелчку, чтобы убедиться, что есть только один обработчик на каждый:

http://jsfiddle.net/MaxPRafferty/B5UPB/

var clickAction = function(){ 
    alert("clicked"); 
    $(".body .content").unbind("click"); 
    setClick($(".body .content"),clickAction); 
} 

var setClick = function(target,action){ 
    target.on("click", ".process_record",action) 
} 

setClick($(".body .content"),clickAction); 

иметь в виду, что это будут синхронизироваться ALL события от $(".body .content"), поэтому, если вы хотите только выгрузить указанное событие, измените строку разворота на $(".body .content").unbind("click",clickAction);

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