Ответ 1
Прежде всего атрибут data - пока вы можете получить доступ к атрибуту data с помощью .attr или .prop, данные сохраняются в объекте $.cache
при загрузке страницы и затем обрабатываются. Данные атрибутов- * НИКОГДА не обновляются.
Чтобы установить данные
$el.data('id', max.cid);
Получить данные
var something = $el.data('id');
К сожалению, нет способа прослушать изменение данных без использования setInterval, как ранее изучалось в этом аналогичном вопросе.
Тем не менее, если это только ВАШ код, который обновляет данные, это логическое решение:
Настроить событие
$el.on('datachange', function(){
// procedure here
});
Затем либо запускайте его, когда вы обновляете данные
$el.data('id', max.cid).trigger('datachange');
или напишите свою собственную функцию данных, которая использует .data() и запускает событие
$.fn.mydata=function(key, variable){
$(this).data(key, variable).trigger('datachange');
}
$el.mydata('id', max.cid);
Пример: http://jsfiddle.net/Qn9H6/
$("#test").on('datachange', function(e, key){
$('#feedback').hide().text('data "' + key + '" was changed to ' + $(this).data(key)).fadeIn(1000);
});
$.fn.mydata=function(key, variable){
if ($(this).data(key)!=variable){ // check if it changed
$(this).data(key, variable).trigger('datachange', key);
}else{
console.log('data wasn\'t changed');
}
}
$('button').click(function() {
$("#test").mydata('id', $(this).text());
})
$("#test").mydata('id', 456);