2013-12-16 6 views
0

У меня есть набор вызовов ajax для удаления записи из таблицы (сделанной django-tables2). Каждая строка имеет кнопку удаления с классом delete_relationship_button и идентификатор pk записи отношений. Ajax-вызов работает отлично ... один раз. Последующие вызовы ничего не делают - вкладка сети и консоль не показывают никаких результатов. Я вижу, что у других была эта проблема, но все решения связаны с использованием .live, который устарел.Ajax вызывает только пожары в первый раз

Любые идеи? Также понравится объяснение или точка в направлении того, почему это происходит.

$('.delete_relationship_button').on('click', function(){ 
    relationship_pk = this.id; 
    console.log(relationship_pk); 
    $.ajax({ 
     type: 'POST', 
     url: '/app/relate/delete/', 
     data: {'relationship_pk':relationship_pk}, 
     success: function(data){ 
      $('#relationship_tables').html(data); 
     } 
    }) 
}) 


def delete_relationship(request): 
    # import pdb; pdb.set_trace() 
    try: 
     relationship_pk = request.POST.get('relationship_pk') 
     relationship = ItemRelationship.objects.get(pk=relationship_pk) 
     source = relationship.source 
     relationship.delete() 
    except: 
     pass 
    db_table, component_table = get_relationships(source) 
    return render(request, 'who/subtemplates/relationships.html', 
     {'db_table': db_table, 'component_table': component_table,}) 
+1

Просто попробуйте '$ (документ) .На ('нажмите', '.delete_relationship_button', функция() {' – karthikr

+0

Brilliant! Хотите сделайте это ответом, чтобы я мог принять его? – thumbtackthief

+1

Лучше делегировать событие статическому родителю '.delete_relationship_button' вместо' document' для лучшей производительности. Присоединение события click к 'document' приведет к его обработке каждый время, когда страница нажата. Обработанный означает, что это проверяет, действительно ли элемент '.delete_relationship_button' был нажатым фактическим элементом, перед выполнением обратного вызова. – user193130

ответ

0

Вы должны использовать delegation using on для динамически загружаемого контента.

Таким образом, измените

$('.delete_relationship_button').on('click', function(){ 

в

$(document).on('click', '.delete_relationship_button', function(){ 
Смежные вопросы