2013-07-07 3 views
1

У меня есть div с уникальным id, и я пытаюсь получить, что divid с jQueryПолучение DIV ID на AJAX загружен содержание

<div class="quantity" id="UNIQUE_ID">Quantity</div> 

Все работает хорошо, но после загрузки div с ajax - я просто не могу» t получите id из загруженного div.

$('.quantity').click(function() {  
    $.post('quantity.php', { id: $(this).attr('id') }, function(output) { 
     $(this).html(output); 
    }); 
}); 

Любые идеи?

+0

Вы уверены, что ваш 'функция click' работает после того, как загрузка содержимого. Проблемы выглядят так, как будто привязка 'onclick' не работает после обновления div. Попробуйте использовать функцию 'on()' jquery, которая может решить вашу проблему. – face

+0

Вопрос: Почему вы используете $ ('. Quantity'), а позже $ ('#' + id)? Вы должны использовать тот или иной, не переключаясь назад. Ответ на проблему: Im почти 200% уверен, что $ unique_id никогда не выписывается правильно. Исправьте это или просто используйте $ ('. Quantity'), чтобы добавить свои данные, как вы это делали при выборе в первую очередь. – Robert

+0

Также помните: class = multiple экземпляры, id = unique, поэтому вы, вероятно, не должны выбирать через класс для начала, тем более, что вы уже присвоили ему значение id (которое, как я уже говорил, не уверен, что оно не написано правильно) – Robert

ответ

3

Это должно работать

$('.quantity').click(function() { 
    var that = this;   

    $.post('quantity.php', { quantityId: $(that).attr('id') }, function(data) { 
     $(that).html(data); 
    }); 
}); 

Но это, как я бы написать его

<div class="quantity" data-id='<?=$unique_id?>'> 
    Quantity 
</div> 

$('.quantity').on('click', function() { 
    var that = this;   

    $.post('quantity.php', { quantityId: $(that).data('id') }, function(data) { 
     $(that).html(data); 
    }); 
});  

И для динамических дивы

<div class="quantity" data-id='<?=$unique_id?>'> 
    Quantity 
</div> 

$(document).on('click', '.quantity', function() { 
    var that = this;   

    $.post('quantity.php', { quantityId: $(that).data('id') }, function(data) { 
     $(that).html(data); 
    }); 
});  
+0

Спасибо за идею 'data-id' - будет использовать это. К сожалению, он все еще не работает с загруженным контентом AJAX. – Vaidas

+0

используйте динамический пример – Robert

+0

Спасибо. Помните, что классы/id должны отражать фактический материал html/css. Всякий раз, когда вам нужно хранить объекты productId или даже полные объекты JSON, атрибуты данных являются вашим другом. Маленький совет: data-something = "value" интерпретируется как строка, data-something = 'value' преобразуется в JSON, что позволяет вам пропускать JSON.parse – Robert

1

onclick привязка к вашему div не будет работать после того, как div был обновлен (привязан ли он к document.ready() правильно?). Решением будет либо переподключение функции к элементу каждый раз, когда вы его измените (плохой), либо используйте функцию on() от jquery. Пример кода:

$(document).on('click', '.quantity', function(){ 
    var id = $(this).attr('id');   

    $.post('quantity.php', { quantityId: id }, function(data){ 
     $('#'+ id).html(data); 
    }); 
}); 

UPDATE: Как обсуждалось в комментариях, метод on должен привязываться к документу в целом, а не класс фактически работать в качестве устаревшего live() метода.

+0

сомневаюсь, что .click() является не чем иным, как внутренним псевдонимом .on ("click") – Robert

+0

Вы имели в виду .live() == $ (document) .on ('click', '.quantity') .. все еще сомневаюсь. – Robert

+0

yes, 'on ('click', function() {})' эквивалентно устаревшей 'live' функции jquery. – face

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