2014-03-28 4 views
1

Я получил следующий код:JQuery - вызов функции внутри функции

function open_viewer() { 
    $('.image_thumb').click(function(){ 
    var reqz = 'id='+$(this).attr('id')+'&i='+$(this).attr('i'); 
    $.ajax({ 
     type: 'POST', 
     url: 'index.php?ind=work&op=get_images', 
     data: reqz, 
     success: function (data) { 
     $('#viewer').remove(); 
     $('body').prepend(data); 
     $('#viewer_close').click(function() { 
      $('#viewer').remove(); 
     }); 
     $('.viewer_button').click(function() { 
      var reqz = 'id='+$(this).attr('id')+'&i='+$(this).attr('i'); 
      $.ajax({ 
      type:'POST', 
      url: 'index.php?ind=work&op=get_images', 
      data: reqz, 
      success: function (data) { 
       $('#viewer').remove(); 
       $('body').prepend(data); 
      } 
      }); 
     }); 
     } 
    }); 
    }); 
} 

Я пытаюсь вызвать $ .ajax() каждый раз, когда я нажимаю .viewer_button и в результате я изменил код на следующие:

function open_viewer() { 
    var reqz = 'id='+$(this).attr('id')+'&i='+$(this).attr('i'); 
    $.ajax({ 
     type: 'POST', 
     url: 'index.php?ind=work&op=get_images', 
     data: reqz, 
     success: function (data) { 
     $('#viewer').remove(); 
     $('body').prepend(data); 
     $('#viewer_close').click(function() { 
      $('#viewer').remove(); 
     }); 
     $('.viewer_button').click(function() { 
         open_viewer(); 
     }); 
     } 
    }); 
} 

Но это вызывает бесконечный цикл и не работает. Может быть, кто-то может указать мне на решение? Заранее спасибо

+0

Попробуйте поместить вызов функции щелчка вне функции open_viewer() – pj013

+0

Забыл упомянуть. Класс .viewer_button появляется только после нажатия .image_thumb и $ .ajax возвращает его. Если я положу вызов функции щелчка за пределами функции open_viewer(), .viewer_button еще не будет. –

ответ

0

Использовать delegation вместо определения обработчиков в обратном вызове ajax.

$(document).ready(function() { 

    $("#parent").on("click", ".viewer_button", function(e) { 
     ... 
    }); 

}); 

Для #parent Вы выбираете селектор для статического родительского элемента, ближайшего к .viewer_button.

0

Почему вы используете функции?

Вы можете использовать

$(document).ready(function() { 
    $('.image_thumb').click(function(){ 

    }); 

    $('.viewer_button').click(function() { 


    }); 
}); 

Внутренний код будет выполняться для каждого щелчка.

+0

Вы можете использовать и .on ('click', function() {}); 'вместо' .click() ' – Kristiyan

+0

Забыл упомянуть. Класс .viewer_button появляется только после нажатия .image_thumb и $ .ajax возвращает его. Если я использую ваш ответ, .viewer_button еще не будет. –

+0

Okey, вы можете использовать свой стиль '$ ('. Image_thumb'). Click (function() { ... success: function (data) { $ ('. Viewer_button'). Click (function() { }); } ... }); ' – Kristiyan

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